From e683e8d4f50160c6710701dba22751390988049d Mon Sep 17 00:00:00 2001 From: kenta92115 Date: Thu, 9 Nov 2023 08:42:06 +0000 Subject: [PATCH 1/4] chore: setup handler --- app/app.go | 1 + app/setup_handler.go | 133 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+) create mode 100644 app/setup_handler.go diff --git a/app/app.go b/app/app.go index 6f8d06ba..bac844d8 100644 --- a/app/app.go +++ b/app/app.go @@ -797,6 +797,7 @@ func New( app.setAnteHandler(encodingConfig.TxConfig, maxGasWanted) app.setPostHandler() app.SetEndBlocker(app.EndBlocker) + SetupHandlers(app, app.EvmKeeper, app.IBCKeeper.ClientKeeper, app.ParamsKeeper, appCodec) if loadLatest { if err := app.LoadLatestVersion(); err != nil { diff --git a/app/setup_handler.go b/app/setup_handler.go new file mode 100644 index 00000000..2f3531c4 --- /dev/null +++ b/app/setup_handler.go @@ -0,0 +1,133 @@ +package app + +import ( + didmoduletypes "swisstronik/x/did/types" + evmkeeper "swisstronik/x/evm/keeper" + evmmoduletypes "swisstronik/x/evm/types" + feemarketmoduletypes "swisstronik/x/feemarket/types" + vestmoduletypes "swisstronik/x/vesting/types" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/codec" + storetypes "github.com/cosmos/cosmos-sdk/store/types" + sdk "github.com/cosmos/cosmos-sdk/types" + m "github.com/cosmos/cosmos-sdk/types/module" + "github.com/cosmos/cosmos-sdk/version" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" + banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + consensusparamtypes "github.com/cosmos/cosmos-sdk/x/consensus/types" + crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/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" + paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" + 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" + ibctmmigrations "github.com/cosmos/ibc-go/v7/modules/light-clients/07-tendermint/migrations" +) + +func SetupHandlers( + app *App, + ek *evmkeeper.Keeper, + clientKeeper ibctmmigrations.ClientKeeper, + pk paramskeeper.Keeper, + cdc codec.BinaryCodec) { + setUpgradeHandler(app, ek, clientKeeper, pk, cdc) + + loadUpgradeStore(app) +} + +func setUpgradeHandler( + app *App, + ek *evmkeeper.Keeper, + clientKeeper ibctmmigrations.ClientKeeper, + pk paramskeeper.Keeper, + cdc codec.BinaryCodec) { + // Set param key table for params module migration + for _, subspace := range app.ParamsKeeper.GetSubspaces() { + subspace := subspace + + app.Logger().Info("Setting up upgrade handler for " + subspace.Name()) + + var keyTable paramstypes.KeyTable + switch subspace.Name() { + case authtypes.ModuleName: + keyTable = authtypes.ParamKeyTable() //nolint:staticcheck + case banktypes.ModuleName: + keyTable = banktypes.ParamKeyTable() //nolint:staticcheck + case stakingtypes.ModuleName: + keyTable = stakingtypes.ParamKeyTable() //nolint:staticcheck + case minttypes.ModuleName: + keyTable = minttypes.ParamKeyTable() //nolint:staticcheck + case slashingtypes.ModuleName: + keyTable = slashingtypes.ParamKeyTable() //nolint:staticcheck + case govtypes.ModuleName: + keyTable = govv1.ParamKeyTable() //nolint:staticcheck + case crisistypes.ModuleName: + keyTable = crisistypes.ParamKeyTable() //nolint:staticcheck + case didmoduletypes.ModuleName: + keyTable = didmoduletypes.ParamKeyTable() + case evmmoduletypes.ModuleName: + keyTable = evmmoduletypes.ParamKeyTable() + case feemarketmoduletypes.ModuleName: + keyTable = feemarketmoduletypes.ParamKeyTable() + case vestmoduletypes.ModuleName: + keyTable = vestmoduletypes.ParamKeyTable() + } + + if !subspace.HasKeyTable() { + subspace.WithKeyTable(keyTable) + } + } + + baseAppLegacySS := app.ParamsKeeper.Subspace(baseapp.Paramspace).WithKeyTable(paramstypes.ConsensusParamsKeyTable()) + + app.UpgradeKeeper.SetUpgradeHandler( + version.Version, + func(ctx sdk.Context, plan upgradetypes.Plan, vm m.VersionMap) (m.VersionMap, error) { + app.Logger().Info("Running upgrade handler for " + version.Version) + + // Migrate Tendermint consensus parameters from x/params module to a + // dedicated x/consensus module. + baseapp.MigrateParams(ctx, baseAppLegacySS, &app.ConsensusParamsKeeper) + + // Include this when migrating to ibc-go v7 (optional) + // source: https://github.com/cosmos/ibc-go/blob/v7.2.0/docs/migrations/v6-to-v7.md + // prune expired tendermint consensus states to save storage space + if _, err := ibctmmigrations.PruneExpiredConsensusStates(ctx, cdc, clientKeeper); err != nil { + return nil, err + } + // !! ATTENTION !! + + return app.mm.RunMigrations(ctx, app.configurator, vm) + }, + ) +} + +func loadUpgradeStore(app *App) { + upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() + if err != nil { + panic(err) + } + + if shouldLoadUpgradeStore(app, upgradeInfo) { + storeUpgrades := storetypes.StoreUpgrades{ + Added: []string{ + didmoduletypes.StoreKey, + consensusparamtypes.StoreKey, + crisistypes.ModuleName, + }, + } + // Use upgrade store loader for the initial loading of all stores when app starts, + // it checks if version == upgradeHeight and applies store upgrades before loading the stores, + // so that new stores start with the correct version (the current height of chain), + // instead the default which is the latest version that store last committed i.e 0 for new stores. + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) + } +} + +func shouldLoadUpgradeStore(app *App, upgradeInfo upgradetypes.Plan) bool { + return upgradeInfo.Name == version.Version && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) +} From 88154f3c43dba847b722e38090741b1a751fe4e7 Mon Sep 17 00:00:00 2001 From: kenta92115 Date: Thu, 9 Nov 2023 08:45:36 +0000 Subject: [PATCH 2/4] chore: add eip --- app/setup_handler.go | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/app/setup_handler.go b/app/setup_handler.go index 2f3531c4..7b0ef261 100644 --- a/app/setup_handler.go +++ b/app/setup_handler.go @@ -29,7 +29,7 @@ import ( ) func SetupHandlers( - app *App, + app *App, ek *evmkeeper.Keeper, clientKeeper ibctmmigrations.ClientKeeper, pk paramskeeper.Keeper, @@ -101,11 +101,30 @@ func setUpgradeHandler( } // !! ATTENTION !! + // Add EIP contained in Shanghai hard fork to the extra EIPs + // in the EVM parameters. This enables using the PUSH0 opcode and + // thus supports Solidity v0.8.20. + // + app.Logger().Info("adding EIP 3855 to EVM parameters") + err := EnableEIPs(ctx, ek, 3855) + if err != nil { + app.Logger().Error("error while enabling EIPs", "error", err) + } + + app.Logger().Debug("running module migrations ...") return app.mm.RunMigrations(ctx, app.configurator, vm) }, ) } +// EnableEIPs enables the given EIPs in the EVM parameters. +func EnableEIPs(ctx sdk.Context, ek *evmkeeper.Keeper, eips ...int64) error { + evmParams := ek.GetParams(ctx) + evmParams.ExtraEIPs = append(evmParams.ExtraEIPs, eips...) + + return ek.SetParams(ctx, evmParams) +} + func loadUpgradeStore(app *App) { upgradeInfo, err := app.UpgradeKeeper.ReadUpgradeInfoFromDisk() if err != nil { From 877e2275472ae39a5a463113f525849a3fe08cba Mon Sep 17 00:00:00 2001 From: kenta92115 Date: Sun, 12 Nov 2023 16:24:59 +0000 Subject: [PATCH 3/4] chore: add distribution param keeper and feemarket keeper module check consPram Block item --- Makefile | 2 +- app/setup_handler.go | 3 +++ x/feemarket/keeper/eip1559.go | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 540d052c..a9bce913 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -VERSION := 1.0.0 +VERSION := v1.0.1 COMMIT := $(shell git log -1 --format='%H') ENCLAVE_HOME ?= $(HOME)/.swisstronik-enclave diff --git a/app/setup_handler.go b/app/setup_handler.go index 7b0ef261..cd5bc9b9 100644 --- a/app/setup_handler.go +++ b/app/setup_handler.go @@ -17,6 +17,7 @@ import ( banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" consensusparamtypes "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" @@ -75,6 +76,8 @@ func setUpgradeHandler( keyTable = feemarketmoduletypes.ParamKeyTable() case vestmoduletypes.ModuleName: keyTable = vestmoduletypes.ParamKeyTable() + case distrtypes.ModuleName: + keyTable = distrtypes.ParamKeyTable() } if !subspace.HasKeyTable() { diff --git a/x/feemarket/keeper/eip1559.go b/x/feemarket/keeper/eip1559.go index 75990a47..e888100c 100644 --- a/x/feemarket/keeper/eip1559.go +++ b/x/feemarket/keeper/eip1559.go @@ -58,7 +58,7 @@ func (k Keeper) CalculateBaseFee(ctx sdk.Context) *big.Int { gasLimit := new(big.Int).SetUint64(math.MaxUint64) // NOTE: a MaxGas equal to -1 means that block gas is unlimited - if consParams != nil && consParams.Block.MaxGas > -1 { + if consParams != nil && consParams.Block != nil && consParams.Block.MaxGas > -1 { gasLimit = big.NewInt(consParams.Block.MaxGas) } From e2e6f57081cec5d28f8466e6f13e5ff5b7116f56 Mon Sep 17 00:00:00 2001 From: kenta92115 Date: Sun, 12 Nov 2023 16:26:38 +0000 Subject: [PATCH 4/4] chore: add default statement --- app/setup_handler.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/setup_handler.go b/app/setup_handler.go index cd5bc9b9..6e6369d6 100644 --- a/app/setup_handler.go +++ b/app/setup_handler.go @@ -78,6 +78,8 @@ func setUpgradeHandler( keyTable = vestmoduletypes.ParamKeyTable() case distrtypes.ModuleName: keyTable = distrtypes.ParamKeyTable() + default: + continue } if !subspace.HasKeyTable() {