Skip to content

Commit

Permalink
feat!: disable ibc upgrade proposal handler (backport #2574) (#2587)
Browse files Browse the repository at this point in the history
This is an automatic backport of pull request #2574 done by
[Mergify](https://mergify.com).


---


<details>
<summary>Mergify commands and options</summary>

<br />

More conditions and actions can be found in the
[documentation](https://docs.mergify.com/).

You can also trigger Mergify actions by commenting on this pull request:

- `@Mergifyio refresh` will re-evaluate the rules
- `@Mergifyio rebase` will rebase this PR on its base branch
- `@Mergifyio update` will merge the base branch into this PR
- `@Mergifyio backport <destination>` will backport this PR on
`<destination>` branch

Additionally, on Mergify [dashboard](https://dashboard.mergify.com) you
can:

- look at your merge queues
- generate the Mergify configuration with the config editor.

Finally, you can contact us on https://mergify.com
</details>

---------

Co-authored-by: Callum Waters <[email protected]>
  • Loading branch information
mergify[bot] and cmwaters authored Sep 28, 2023
1 parent 0b76b2c commit 4c20dc2
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 2 deletions.
3 changes: 1 addition & 2 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ import (
ibctransferkeeper "github.com/cosmos/ibc-go/v6/modules/apps/transfer/keeper"
ibctransfertypes "github.com/cosmos/ibc-go/v6/modules/apps/transfer/types"
ibc "github.com/cosmos/ibc-go/v6/modules/core"
ibcclient "github.com/cosmos/ibc-go/v6/modules/core/02-client"
ibcclienttypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"
ibcporttypes "github.com/cosmos/ibc-go/v6/modules/core/05-port/types"
ibchost "github.com/cosmos/ibc-go/v6/modules/core/24-host"
Expand Down Expand Up @@ -361,7 +360,7 @@ func New(
govRouter := oldgovtypes.NewRouter()
govRouter.AddRoute(paramproposal.RouterKey, paramBlockList.GovHandler(app.ParamsKeeper)).
AddRoute(distrtypes.RouterKey, distr.NewCommunityPoolSpendProposalHandler(app.DistrKeeper)).
AddRoute(ibcclienttypes.RouterKey, ibcclient.NewClientProposalHandler(app.IBCKeeper.ClientKeeper))
AddRoute(ibcclienttypes.RouterKey, NewClientProposalHandler(app.IBCKeeper.ClientKeeper))

// Create Transfer Keepers
tokenFilterKeeper := tokenfilter.NewKeeper(app.IBCKeeper.ChannelKeeper)
Expand Down
28 changes: 28 additions & 0 deletions app/ibc_proposal_handler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package app

import (
"cosmossdk.io/errors"
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"

"github.com/cosmos/ibc-go/v6/modules/core/02-client/keeper"
"github.com/cosmos/ibc-go/v6/modules/core/02-client/types"
)

// NewClientProposalHandler defines the 02-client proposal handler. It disables the
// UpgradeProposalType. Handling of updating the IBC Client will be done in v2 of the
// app.
func NewClientProposalHandler(k keeper.Keeper) govtypes.Handler {
return func(ctx sdk.Context, content govtypes.Content) error {
switch c := content.(type) {
case *types.ClientUpdateProposal:
return k.ClientUpdateProposal(ctx, c)
case *types.UpgradeProposal:
return errors.Wrap(sdkerrors.ErrInvalidRequest, "ibc upgrade proposal not supported")

default:
return errors.Wrapf(sdkerrors.ErrUnknownRequest, "unrecognized ibc proposal content type: %T", c)
}
}
}
33 changes: 33 additions & 0 deletions x/upgrade/test/integration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ import (
v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1"
v1beta1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
"github.com/cosmos/cosmos-sdk/x/upgrade/types"
ibctypes "github.com/cosmos/ibc-go/v6/modules/core/02-client/types"
ibctmtypes "github.com/cosmos/ibc-go/v6/modules/light-clients/07-tendermint/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"github.com/stretchr/testify/suite"
Expand Down Expand Up @@ -148,6 +150,37 @@ func (s *UpgradeTestSuite) TestNewGovUpgradeFailure() {
require.Contains(t, finalResult.TxResult.Log, "proposal message not recognized by router")
}

func (s *UpgradeTestSuite) TestIBCUpgradeFailure() {
t := s.T()
plan := types.Plan{
Name: "v2",
Height: 20,
Info: "this should not pass",
}
upgradedClientState := &ibctmtypes.ClientState{}

upgradeMsg, err := ibctypes.NewUpgradeProposal("Upgrade to v2!", "Upgrade to v2!", plan, upgradedClientState)
require.NoError(t, err)

dep := sdk.NewCoins(sdk.NewCoin(app.BondDenom, sdk.NewInt(1000000000000)))
acc := s.unusedAccount()
accAddr := getAddress(acc, s.cctx.Keyring)
msg, err := v1beta1.NewMsgSubmitProposal(upgradeMsg, dep, accAddr)
require.NoError(t, err)

// submit the transaction and wait a block for it to be included
res, err := testnode.SignAndBroadcastTx(s.ecfg, s.cctx.Context, acc, msg)
require.NoError(t, err)
require.Equal(t, abci.CodeTypeOK, res.Code) // we're only submitting the tx, so we expect everything to work
require.NoError(t, s.cctx.WaitForNextBlock())

// compare the result after the tx has been executed.
finalResult, err := testnode.QueryTx(s.cctx.Context, res.TxHash, false)
require.NoError(t, err)
require.NotNil(t, finalResult)
require.Contains(t, finalResult.TxResult.Log, "ibc upgrade proposal not supported")
}

func getAddress(account string, kr keyring.Keyring) sdk.AccAddress {
rec, err := kr.Key(account)
if err != nil {
Expand Down

0 comments on commit 4c20dc2

Please sign in to comment.