Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ func (app *App) setupUpgradeHandlers() {
app.ICAHostKeeper,
app.StakingKeeper,
app.TransferKeeper,
app.EvmKeeper,
),
)

Expand Down
9 changes: 9 additions & 0 deletions app/upgrades/v11/keepers.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ import (

sdk "github.com/cosmos/cosmos-sdk/types"
stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types"
evmtypes "github.com/cosmos/evm/x/vm/types"
icahosttypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/types"
"github.com/ethereum/go-ethereum/common"
)

// ICAHostKeeper is the narrow interface required by the v11 upgrade
Expand All @@ -26,3 +28,10 @@ type StakingKeeper interface {
type TransferKeeper interface {
UnescrowCoin(ctx sdk.Context, escrowAddress, receiver sdk.AccAddress, coin sdk.Coin) error
}

// EvmKeeper is the narrow interface required by the v11 upgrade
// handler. It matches a subset of evmkeeper.Keeper.
type EvmKeeper interface {
IsContract(ctx sdk.Context, addr common.Address) bool
AddPreinstalls(ctx sdk.Context, preinstalls []evmtypes.Preinstall) error
}
24 changes: 24 additions & 0 deletions app/upgrades/v11/upgrades.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ import (
upgradetypes "cosmossdk.io/x/upgrade/types"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/module"
evmtypes "github.com/cosmos/evm/x/vm/types"
icahosttypes "github.com/cosmos/ibc-go/v10/modules/apps/27-interchain-accounts/host/types"
transfertypes "github.com/cosmos/ibc-go/v10/modules/apps/transfer/types"
"github.com/ethereum/go-ethereum/common"
)

func CreateUpgradeHandler(
Expand All @@ -19,6 +21,7 @@ func CreateUpgradeHandler(
icaHostKeeper ICAHostKeeper,
stakingKeeper StakingKeeper,
transferKeeper TransferKeeper,
evmKeeper EvmKeeper,
) upgradetypes.UpgradeHandler {
return func(c context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) {
ctx := sdk.UnwrapSDKContext(c)
Expand Down Expand Up @@ -50,11 +53,32 @@ func CreateUpgradeHandler(
return nil, err
}

logger.Info("Installing missing default preinstalls...")
if err := installMissingPreinstalls(ctx, logger, evmKeeper); err != nil {
return nil, err
}

logger.Info("Finished v11 upgrade handler")
return vm, nil
}
}

// installMissingPreinstalls deploys any default preinstall that is absent.
func installMissingPreinstalls(ctx sdk.Context, logger log.Logger, evmKeeper EvmKeeper) error {
var missingPreinstalls []evmtypes.Preinstall
for _, aDefaultPreinstall := range evmtypes.DefaultPreinstalls {
if evmKeeper.IsContract(ctx, common.HexToAddress(aDefaultPreinstall.Address)) {
continue
}
logger.Info("installing missing preinstall", "name", aDefaultPreinstall.Name, "address", aDefaultPreinstall.Address)
missingPreinstalls = append(missingPreinstalls, aDefaultPreinstall)
}
if len(missingPreinstalls) == 0 {
return nil
}
return evmKeeper.AddPreinstalls(ctx, missingPreinstalls)
}

// withdrawElysEscrow releases the configured amount of XRP from the Elys channel
// escrow to the recovery address configured for the running network.
func withdrawElysEscrow(ctx sdk.Context, logger log.Logger, transferKeeper TransferKeeper) error {
Expand Down
Loading