mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-25 15:55:18 +00:00
c9d900be2c
* set CDP block interval to 100 to only run interest synchronization for risky cdps every 100 blocks instead of every block * refactor and use constant for setting to improve clarity; update block interval to 50 instead of 100. This will decrease risk by running around every 6 minutes instead of 12 mintues for current mainnet block times.
141 lines
5.0 KiB
Go
141 lines
5.0 KiB
Go
package app
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/cosmos/cosmos-sdk/baseapp"
|
|
storetypes "github.com/cosmos/cosmos-sdk/store/types"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/types/module"
|
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
|
|
consensustypes "github.com/cosmos/cosmos-sdk/x/consensus/types"
|
|
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
|
|
distrtypes "github.com/cosmos/cosmos-sdk/x/distribution/types"
|
|
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
|
|
govv1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
|
|
minttypes "github.com/cosmos/cosmos-sdk/x/mint/types"
|
|
paramstypes "github.com/cosmos/cosmos-sdk/x/params/types"
|
|
slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types"
|
|
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
|
|
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
|
|
packetforwardtypes "github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7/packetforward/types"
|
|
ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
|
|
ibctmmigrations "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/migrations"
|
|
)
|
|
|
|
const (
|
|
UpgradeName_Mainnet = "v0.26.0"
|
|
UpgradeName_Testnet = "v0.26.0-alpha.0"
|
|
|
|
CDPLiquidationBlockInterval = int64(50)
|
|
)
|
|
|
|
// RegisterUpgradeHandlers registers the upgrade handlers for the app.
|
|
func (app App) RegisterUpgradeHandlers() {
|
|
app.upgradeKeeper.SetUpgradeHandler(
|
|
UpgradeName_Mainnet,
|
|
upgradeHandler(app, UpgradeName_Mainnet),
|
|
)
|
|
app.upgradeKeeper.SetUpgradeHandler(
|
|
UpgradeName_Testnet,
|
|
upgradeHandler(app, UpgradeName_Testnet),
|
|
)
|
|
|
|
upgradeInfo, err := app.upgradeKeeper.ReadUpgradeInfoFromDisk()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
doUpgrade := upgradeInfo.Name == UpgradeName_Mainnet ||
|
|
upgradeInfo.Name == UpgradeName_Testnet
|
|
|
|
if doUpgrade && !app.upgradeKeeper.IsSkipHeight(upgradeInfo.Height) {
|
|
storeUpgrades := storetypes.StoreUpgrades{
|
|
Added: []string{
|
|
crisistypes.ModuleName,
|
|
consensustypes.ModuleName,
|
|
packetforwardtypes.ModuleName,
|
|
},
|
|
}
|
|
|
|
// configure store loader that checks if version == upgradeHeight and applies store upgrades
|
|
app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades))
|
|
}
|
|
}
|
|
|
|
// upgradeHandler returns an UpgradeHandler for the given upgrade parameters.
|
|
func upgradeHandler(
|
|
app App,
|
|
name string,
|
|
) upgradetypes.UpgradeHandler {
|
|
return func(
|
|
ctx sdk.Context,
|
|
plan upgradetypes.Plan,
|
|
fromVM module.VersionMap,
|
|
) (module.VersionMap, error) {
|
|
app.Logger().Info(fmt.Sprintf("running %s upgrade handler", name))
|
|
|
|
baseAppLegacySS := app.paramsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable())
|
|
|
|
// Set param key table for params module migration
|
|
for _, subspace := range app.paramsKeeper.GetSubspaces() {
|
|
subspace := subspace
|
|
var keyTable paramstypes.KeyTable
|
|
switch subspace.Name() {
|
|
// sdk
|
|
case authtypes.ModuleName:
|
|
keyTable = authtypes.ParamKeyTable() //nolint:staticcheck
|
|
case banktypes.ModuleName:
|
|
keyTable = banktypes.ParamKeyTable() //nolint:staticcheck,nolintlint
|
|
case stakingtypes.ModuleName:
|
|
keyTable = stakingtypes.ParamKeyTable()
|
|
case minttypes.ModuleName:
|
|
keyTable = minttypes.ParamKeyTable() //nolint:staticcheck
|
|
case distrtypes.ModuleName:
|
|
keyTable = distrtypes.ParamKeyTable() //nolint:staticcheck,nolintlint
|
|
case slashingtypes.ModuleName:
|
|
keyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck
|
|
case govtypes.ModuleName:
|
|
keyTable = govv1.ParamKeyTable() //nolint:staticcheck
|
|
case crisistypes.ModuleName:
|
|
keyTable = crisistypes.ParamKeyTable() //nolint:staticcheck
|
|
|
|
// ibc
|
|
case ibctransfertypes.ModuleName:
|
|
keyTable = ibctransfertypes.ParamKeyTable() //nolint:staticcheck
|
|
|
|
default:
|
|
continue
|
|
}
|
|
if !subspace.HasKeyTable() {
|
|
// NOTE: This modifies the internal map used to store the key table entries
|
|
// which is a pointer.
|
|
subspace.WithKeyTable(keyTable)
|
|
}
|
|
}
|
|
|
|
// optional migration: prune expired tendermint consensus states to save storage space
|
|
// see https://github.com/cosmos/ibc-go/blob/v7.2.0/docs/migrations/v6-to-v7.md#chains
|
|
if _, err := ibctmmigrations.PruneExpiredConsensusStates(ctx, app.appCodec, app.ibcKeeper.ClientKeeper); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// migrate tendermint consensus parameters from x/params module to a
|
|
// dedicated x/consensus module.
|
|
baseapp.MigrateParams(ctx, baseAppLegacySS, &app.consensusParamsKeeper)
|
|
|
|
// run migrations for all modules and return new consensus version map
|
|
versionMap, err := app.mm.RunMigrations(ctx, app.configurator, fromVM)
|
|
|
|
// Set risky CDP's to sync interest and liquidate every 100 blocks instead
|
|
// of every block. This significantly improves performance as this cdp
|
|
// process is a signification porition of time spent during block execution.
|
|
cdpParams := app.cdpKeeper.GetParams(ctx)
|
|
cdpParams.LiquidationBlockInterval = CDPLiquidationBlockInterval
|
|
app.cdpKeeper.SetParams(ctx, cdpParams)
|
|
|
|
return versionMap, err
|
|
}
|
|
}
|