@@ -28,6 +28,7 @@ import (
2828 "github.com/cosmos/cosmos-sdk/types/module"
2929 authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
3030 bankkeeper "github.com/cosmos/cosmos-sdk/x/bank/keeper"
31+ clientkeeper "github.com/cosmos/ibc-go/v8/modules/core/02-client/keeper"
3132 authoritykeeper "github.com/noble-assets/authority/keeper"
3233)
3334
@@ -38,9 +39,12 @@ func CreateUpgradeHandler(
3839 addressCodec address.Codec ,
3940 authorityKeeper * authoritykeeper.Keeper ,
4041 bankKeeper bankkeeper.Keeper ,
42+ clientKeeper clientkeeper.Keeper ,
4143 dollarKeeper * dollarkeeper.Keeper ,
4244) upgradetypes.UpgradeHandler {
4345 return func (ctx context.Context , _ upgradetypes.Plan , vm module.VersionMap ) (module.VersionMap , error ) {
46+ sdkCtx := sdk .UnwrapSDKContext (ctx )
47+
4448 vm , err := mm .RunMigrations (ctx , cfg , vm )
4549 if err != nil {
4650 return vm , err
@@ -56,6 +60,18 @@ func CreateUpgradeHandler(
5660 return vm , err
5761 }
5862
63+ // The IBC light client for the shido_9008-1 chain has expired on
64+ // Noble's mainnet. In IBC-Go v8.7.0, the MsgRecoverClient message does
65+ // not support the LegacyAminoJSON signing mode, preventing recovery
66+ // via the Noble Maintenance Multisig. As a result, the client must be
67+ // manually recovered as part of this software upgrade.
68+ if sdkCtx .ChainID () == MainnetChainID {
69+ err = clientKeeper .RecoverClient (sdkCtx , "07-tendermint-106" , "07-tendermint-186" )
70+ if err != nil {
71+ logger .Error ("unable to recover shido_9008-1 light client" , "err" , err )
72+ }
73+ }
74+
5975 logger .Info (UpgradeASCII )
6076
6177 return vm , nil
0 commit comments