Skip to content

Commit

Permalink
fix(upgrade): WIP hotfix for v14.0.0 upgrade (#1803)
Browse files Browse the repository at this point in the history
* change order of migration - do vesting migration before params migration

* avoid using NewCoins method

* remove migration logic for v14 upgrade handler

* Revert "remove migration logic for v14 upgrade handler"

This reverts commit 4ea2709.

* try using the EVM denom

* fix

* move migration logic from upgrade handler to begin blocker

* address linter

* adjust changelog

* update curl versino
  • Loading branch information
MalteHerrmann committed Sep 25, 2023
1 parent 392d906 commit cb4c4f9
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 40 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,10 @@ Ref: https://keepachangelog.com/en/1.0.0/

# Changelog

## [v14.1.0] - 2023-09-25

- (upgrade) [#1803](https://github.com/evmos/evmos/pull/1803) Fix the upgrade procedure on v14.0.0

## [v14.0.0] - 2023-09-19

### State Machine Breaking
Expand Down
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ WORKDIR /root
COPY --from=build-env /go/src/github.com/evmos/evmos/build/evmosd /usr/bin/evmosd
COPY --from=build-env /go/bin/toml-cli /usr/bin/toml-cli

RUN apk add --no-cache ca-certificates=20230506-r0 jq=1.6-r3 curl=8.2.1-r0 bash=5.2.15-r5 vim=9.0.1568-r0 lz4=1.9.4-r4 \
RUN apk add --no-cache ca-certificates=20230506-r0 jq=1.6-r3 curl=8.3.0-r0 bash=5.2.15-r5 vim=9.0.1568-r0 lz4=1.9.4-r4 \
&& addgroup -g 1000 evmos \
&& adduser -S -h /home/evmos -D evmos -u 1000 -G evmos

Expand Down
23 changes: 20 additions & 3 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ import (

// unnamed import of statik for swagger UI support
_ "github.com/evmos/evmos/v14/client/docs/statik"
"github.com/evmos/evmos/v14/utils"

"github.com/evmos/evmos/v14/app/ante"
ethante "github.com/evmos/evmos/v14/app/ante/evm"
Expand Down Expand Up @@ -965,6 +966,25 @@ func (app *Evmos) setPostHandler() {
// of the new block for every registered module. If there is a registered fork at the current height,
// BeginBlocker will schedule the upgrade plan and perform the state migration (if any).
func (app *Evmos) BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock) abci.ResponseBeginBlock {
// Check if block height is upgrade height plus 10
if ctx.BlockHeight() == 16105010 && utils.IsMainnet(ctx.ChainID()) {
logger := ctx.Logger().With("module", "app")
logger.Debug("updating vesting funders to new team multisig")
if err := v14.UpdateVestingFunders(ctx, app.VestingKeeper, v14.NewTeamPremintWalletAcc); err != nil {
logger.Error("error while updating vesting funders", "error", err)
}

logger.Debug("migrating strategic reserves")
if err := v14.MigrateNativeMultisigs(ctx, app.BankKeeper, app.EvmKeeper, app.StakingKeeper, v14.NewTeamStrategicReserveAcc, v14.OldStrategicReserves...); err != nil {
logger.Error("error while migrating native multisigs", "error", err)
}

logger.Debug("migrating team premint wallet")
if err := v14.MigrateNativeMultisigs(ctx, app.BankKeeper, app.EvmKeeper, app.StakingKeeper, v14.NewTeamPremintWalletAcc, v14.OldTeamPremintWallet); err != nil {
logger.Error("error while migrating team premint wallet", "error", err)
}
}

// Perform any scheduled forks before executing the modules logic
app.ScheduleForkUpgrade(ctx)
return app.mm.BeginBlock(ctx, req)
Expand Down Expand Up @@ -1310,10 +1330,7 @@ func (app *Evmos) setupUpgradeHandlers() {
v14.UpgradeName,
v14.CreateUpgradeHandler(
app.mm, app.configurator,
app.BankKeeper,
app.EvmKeeper,
app.StakingKeeper,
app.VestingKeeper,
app.ConsensusParamsKeeper,
app.IBCKeeper.ClientKeeper,
app.ParamsKeeper,
Expand Down
14 changes: 11 additions & 3 deletions app/upgrades/v14/migrations.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
evmkeeper "github.com/evmos/evmos/v14/x/evm/keeper"
)

// MigratedDelegation holds the relevant information about a delegation to be migrated
Expand All @@ -23,10 +24,12 @@ type MigratedDelegation struct {

// MigrateNativeMultisigs migrates the native multisigs to the new team multisig including all
// staking delegations.
func MigrateNativeMultisigs(ctx sdk.Context, bk bankkeeper.Keeper, sk stakingkeeper.Keeper, newMultisig sdk.AccAddress, oldMultisigs ...string) error {
func MigrateNativeMultisigs(ctx sdk.Context, bk bankkeeper.Keeper, ek *evmkeeper.Keeper, sk stakingkeeper.Keeper, newMultisig sdk.AccAddress, oldMultisigs ...string) error {
var (
// evmParams are the params of the EVM module
evmParams = ek.GetParams(ctx)
// bondDenom is the staking bond denomination used
bondDenom = sk.BondDenom(ctx)
bondDenom = evmParams.EvmDenom
// migratedDelegations stores all delegations that must be migrated
migratedDelegations []MigratedDelegation
)
Expand Down Expand Up @@ -93,7 +96,12 @@ func InstantUnbonding(
if err != nil {
return math.Int{}, err
}
unbondCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, unbondAmount))
// NOTE: Avoid using sdk.NewCoins here because it panics on an invalid denom,
// which was the problem in the v14.0.0 release.
unbondCoins := sdk.Coins{sdk.Coin{Denom: bondDenom, Amount: unbondAmount}}
if err := unbondCoins.Validate(); err != nil {
return math.Int{}, fmt.Errorf("invalid unbonding coins: %v", err)
}

// transfer the validator tokens to the not bonded pool if necessary
validator, found := sk.GetValidator(ctx, valAddr)
Expand Down
4 changes: 2 additions & 2 deletions app/upgrades/v14/migrations_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import (
"cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
"github.com/evmos/evmos/v14/app/upgrades/v14"
v14 "github.com/evmos/evmos/v14/app/upgrades/v14"
"github.com/evmos/evmos/v14/crypto/ethsecp256k1"
"github.com/evmos/evmos/v14/testutil"
testutiltx "github.com/evmos/evmos/v14/testutil/tx"
Expand Down Expand Up @@ -59,7 +59,7 @@ func (s *UpgradesTestSuite) TestUpdateMigrateNativeMultisigs() {
// Check validator shares before migration
expectedSharesMap := s.getDelegationSharesMap()

err := v14.MigrateNativeMultisigs(s.ctx, s.app.BankKeeper, s.app.StakingKeeper, migrationTarget, oldMultisigs...)
err := v14.MigrateNativeMultisigs(s.ctx, s.app.BankKeeper, s.app.EvmKeeper, s.app.StakingKeeper, migrationTarget, oldMultisigs...)
s.Require().NoError(err, "failed to migrate native multisigs")

// Check that the multisigs have been updated
Expand Down
41 changes: 10 additions & 31 deletions app/upgrades/v14/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
consensuskeeper "github.com/cosmos/cosmos-sdk/x/consensus/keeper"
crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types"
Expand All @@ -20,7 +19,6 @@ import (
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"
stakingkeeper "github.com/cosmos/cosmos-sdk/x/staking/keeper"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types"
ibctransfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
Expand All @@ -31,7 +29,6 @@ import (
evmkeeper "github.com/evmos/evmos/v14/x/evm/keeper"
evmtypes "github.com/evmos/evmos/v14/x/evm/types"
feemarkettypes "github.com/evmos/evmos/v14/x/feemarket/types"
vestingkeeper "github.com/evmos/evmos/v14/x/vesting/keeper"
)

const (
Expand All @@ -43,8 +40,8 @@ const (
OldFunder1 = "evmos1sgjgup7wz3qyfcqqpr66jlm9qpk3j63ajupc9l"
// OldFunder2 is the other old vesting funder to be replaced
OldFunder2 = "evmos1xp38jqcjf2s7wyuyh3fwrjukuj4ny54k2yaq97"
// oldTeamPremintWallet is the old team premint wallet
oldTeamPremintWallet = "evmos1sgjgup7wz3qyfcqqpr66jlm9qpk3j63ajupc9l"
// OldTeamPremintWallet is the old team premint wallet
OldTeamPremintWallet = "evmos1sgjgup7wz3qyfcqqpr66jlm9qpk3j63ajupc9l"
// VestingAddrByFunder1 is the vesting account funded by OldFunder1
VestingAddrByFunder1 = "evmos1pxjncpsu2rd3hjxgswkqaenrpu3v5yxurzm7jp"
)
Expand Down Expand Up @@ -75,10 +72,7 @@ var (
func CreateUpgradeHandler(
mm *module.Manager,
configurator module.Configurator,
bk bankkeeper.Keeper,
ek *evmkeeper.Keeper,
sk stakingkeeper.Keeper,
vk vestingkeeper.Keeper,
ck consensuskeeper.Keeper,
clientKeeper ibctmmigrations.ClientKeeper,
pk paramskeeper.Keeper,
Expand All @@ -87,6 +81,14 @@ func CreateUpgradeHandler(
return func(ctx sdk.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
logger := ctx.Logger().With("upgrade", UpgradeName)

if utils.IsMainnet(ctx.ChainID()) {
logger.Debug("adding vesting EVM extension to active precompiles")
if err := EnableVestingExtension(ctx, ek); err != nil {
// log error instead of aborting the upgrade
logger.Error("error while enabling vesting extension", "error", err)
}
}

// !! ATTENTION !!
// v14 upgrade handler
// !! WHEN UPGRADING TO SDK v0.47 MAKE SURE TO INCLUDE THIS
Expand Down Expand Up @@ -142,29 +144,6 @@ func CreateUpgradeHandler(
}
// !! ATTENTION !!

if utils.IsMainnet(ctx.ChainID()) {
logger.Debug("adding vesting EVM extension to active precompiles")
if err := EnableVestingExtension(ctx, ek); err != nil {
// log error instead of aborting the upgrade
logger.Error("error while enabling vesting extension", "error", err)
}

logger.Debug("updating vesting funders to new team multisig")
if err := UpdateVestingFunders(ctx, vk, NewTeamPremintWalletAcc); err != nil {
logger.Error("error while updating vesting funders", "error", err)
}

logger.Debug("migrating strategic reserves")
if err := MigrateNativeMultisigs(ctx, bk, sk, NewTeamStrategicReserveAcc, OldStrategicReserves...); err != nil {
logger.Error("error while migrating native multisigs", "error", err)
}

logger.Debug("migrating team premint wallet")
if err := MigrateNativeMultisigs(ctx, bk, sk, NewTeamPremintWalletAcc, oldTeamPremintWallet); err != nil {
logger.Error("error while migrating team premint wallet", "error", err)
}
}

// Leave modules are as-is to avoid running InitGenesis.
logger.Debug("running module migrations ...")
return mm.RunMigrations(ctx, configurator, vm)
Expand Down

0 comments on commit cb4c4f9

Please sign in to comment.