From 4c2b39cd799ff203a4e53f08a7a4b00addb924a8 Mon Sep 17 00:00:00 2001 From: vuong Date: Sat, 30 Apr 2022 18:18:31 +0700 Subject: [PATCH 01/16] remove crossing hellos from ChanOpenTry --- modules/core/04-channel/keeper/handshake.go | 57 +++------------------ modules/core/keeper/msg_server.go | 2 +- 2 files changed, 8 insertions(+), 51 deletions(-) diff --git a/modules/core/04-channel/keeper/handshake.go b/modules/core/04-channel/keeper/handshake.go index 1d650bb4d7b..7f75ce0f32b 100644 --- a/modules/core/04-channel/keeper/handshake.go +++ b/modules/core/04-channel/keeper/handshake.go @@ -98,8 +98,7 @@ func (k Keeper) ChanOpenTry( ctx sdk.Context, order types.Order, connectionHops []string, - portID, - previousChannelID string, + portID string, portCap *capabilitytypes.Capability, counterparty types.Counterparty, counterpartyVersion string, @@ -107,42 +106,11 @@ func (k Keeper) ChanOpenTry( proofHeight exported.Height, ) (string, *capabilitytypes.Capability, error) { var ( - previousChannel types.Channel - previousChannelFound bool + channelID string ) - channelID := previousChannelID - - // connection hops only supports a single connection - if len(connectionHops) != 1 { - return "", nil, sdkerrors.Wrapf(types.ErrTooManyConnectionHops, "expected 1, got %d", len(connectionHops)) - } - - // empty channel identifier indicates continuing a previous channel handshake - if previousChannelID != "" { - // channel identifier and connection hop length checked on msg.ValidateBasic() - // ensure that the previous channel exists - previousChannel, previousChannelFound = k.GetChannel(ctx, portID, previousChannelID) - if !previousChannelFound { - return "", nil, sdkerrors.Wrapf(types.ErrInvalidChannel, "previous channel does not exist for supplied previous channelID %s", previousChannelID) - } - // previous channel must use the same fields - if !(previousChannel.Ordering == order && - previousChannel.Counterparty.PortId == counterparty.PortId && - previousChannel.Counterparty.ChannelId == "" && - previousChannel.ConnectionHops[0] == connectionHops[0] && // ChanOpenInit will only set a single connection hop - previousChannel.Version == counterpartyVersion) { - return "", nil, sdkerrors.Wrap(types.ErrInvalidChannel, "channel fields mismatch previous channel fields") - } - - if previousChannel.State != types.INIT { - return "", nil, sdkerrors.Wrapf(types.ErrInvalidChannelState, "previous channel state is in %s, expected INIT", previousChannel.State) - } - - } else { - // generate a new channel - channelID = k.GenerateChannelIdentifier(ctx) - } + // generate a new channel + channelID = k.GenerateChannelIdentifier(ctx) if !k.portKeeper.Authenticate(ctx, portCap, portID) { return "", nil, sdkerrors.Wrapf(porttypes.ErrInvalidPort, "caller does not own port capability for port ID %s", portID) @@ -199,20 +167,9 @@ func (k Keeper) ChanOpenTry( err error ) - if !previousChannelFound { - capKey, err = k.scopedKeeper.NewCapability(ctx, host.ChannelCapabilityPath(portID, channelID)) - if err != nil { - return "", nil, sdkerrors.Wrapf(err, "could not create channel capability for port ID %s and channel ID %s", portID, channelID) - } - - } else { - // capability initialized in ChanOpenInit - capKey, found = k.scopedKeeper.GetCapability(ctx, host.ChannelCapabilityPath(portID, channelID)) - if !found { - return "", nil, sdkerrors.Wrapf(types.ErrChannelCapabilityNotFound, - "capability not found for existing channel, portID (%s) channelID (%s)", portID, channelID, - ) - } + capKey, err = k.scopedKeeper.NewCapability(ctx, host.ChannelCapabilityPath(portID, channelID)) + if err != nil { + return "", nil, sdkerrors.Wrapf(err, "could not create channel capability for port ID %s and channel ID %s", portID, channelID) } return channelID, capKey, nil diff --git a/modules/core/keeper/msg_server.go b/modules/core/keeper/msg_server.go index e8b7c0fd254..5e01da52c5e 100644 --- a/modules/core/keeper/msg_server.go +++ b/modules/core/keeper/msg_server.go @@ -217,7 +217,7 @@ func (k Keeper) ChannelOpenTry(goCtx context.Context, msg *channeltypes.MsgChann } // Perform 04-channel verification - channelID, cap, err := k.ChannelKeeper.ChanOpenTry(ctx, msg.Channel.Ordering, msg.Channel.ConnectionHops, msg.PortId, msg.PreviousChannelId, + channelID, cap, err := k.ChannelKeeper.ChanOpenTry(ctx, msg.Channel.Ordering, msg.Channel.ConnectionHops, msg.PortId, portCap, msg.Channel.Counterparty, msg.CounterpartyVersion, msg.ProofInit, msg.ProofHeight, ) if err != nil { From 5dac6fa70c999d0bf3b819b7ff9c86dd6d82ded4 Mon Sep 17 00:00:00 2001 From: vuong Date: Sat, 30 Apr 2022 18:22:34 +0700 Subject: [PATCH 02/16] remove crossing hellos testcase --- .../core/04-channel/keeper/handshake_test.go | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/modules/core/04-channel/keeper/handshake_test.go b/modules/core/04-channel/keeper/handshake_test.go index aa554fe9fd8..048c310971e 100644 --- a/modules/core/04-channel/keeper/handshake_test.go +++ b/modules/core/04-channel/keeper/handshake_test.go @@ -143,10 +143,9 @@ func (suite *KeeperTestSuite) TestChanOpenInit() { // ChanOpenTry can succeed. func (suite *KeeperTestSuite) TestChanOpenTry() { var ( - path *ibctesting.Path - previousChannelID string - portCap *capabilitytypes.Capability - heightDiff uint64 + path *ibctesting.Path + portCap *capabilitytypes.Capability + heightDiff uint64 ) testCases := []testCase{ @@ -164,22 +163,8 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { err := suite.coordinator.ChanOpenInitOnBothChains(path) suite.Require().NoError(err) - previousChannelID = path.EndpointB.ChannelID portCap = suite.chainB.GetPortCapability(ibctesting.MockPort) }, true}, - {"previous channel with invalid version, crossing hello", func() { - suite.coordinator.SetupConnections(path) - path.SetChannelOrdered() - - // modify channel version - path.EndpointA.ChannelConfig.Version = "invalid version" - - err := suite.coordinator.ChanOpenInitOnBothChains(path) - suite.Require().NoError(err) - - previousChannelID = path.EndpointB.ChannelID - portCap = suite.chainB.GetPortCapability(ibctesting.MockPort) - }, false}, {"previous channel with invalid state", func() { suite.coordinator.SetupConnections(path) @@ -268,7 +253,6 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { suite.Run(fmt.Sprintf("Case %s", tc.msg), func() { suite.SetupTest() // reset heightDiff = 0 // must be explicitly changed in malleate - previousChannelID = "" path = ibctesting.NewPath(suite.chainA, suite.chainB) tc.malleate() @@ -286,7 +270,7 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { channelID, cap, err := suite.chainB.App.GetIBCKeeper().ChannelKeeper.ChanOpenTry( suite.chainB.GetContext(), types.ORDERED, []string{path.EndpointB.ConnectionID}, - path.EndpointB.ChannelConfig.PortID, previousChannelID, portCap, counterparty, path.EndpointA.ChannelConfig.Version, + path.EndpointB.ChannelConfig.PortID, portCap, counterparty, path.EndpointA.ChannelConfig.Version, proof, malleateHeight(proofHeight, heightDiff), ) From f281033f3895397c00cc93074c43007835288b85 Mon Sep 17 00:00:00 2001 From: vuong Date: Tue, 3 May 2022 05:11:42 +0700 Subject: [PATCH 03/16] revert single connectionHops check --- modules/core/04-channel/keeper/handshake.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/modules/core/04-channel/keeper/handshake.go b/modules/core/04-channel/keeper/handshake.go index 7f75ce0f32b..2a9db853456 100644 --- a/modules/core/04-channel/keeper/handshake.go +++ b/modules/core/04-channel/keeper/handshake.go @@ -109,6 +109,11 @@ func (k Keeper) ChanOpenTry( channelID string ) + // connection hops only supports a single connection + if len(connectionHops) != 1 { + return "", nil, sdkerrors.Wrapf(types.ErrTooManyConnectionHops, "expected 1, got %d", len(connectionHops)) + } + // generate a new channel channelID = k.GenerateChannelIdentifier(ctx) From ef47c1cad94c1f06d71a778a1e4d6657a55a8a2a Mon Sep 17 00:00:00 2001 From: vuong Date: Tue, 3 May 2022 05:21:14 +0700 Subject: [PATCH 04/16] add comment in MsgChannelOpenTry tx proto about deprecate field --- proto/ibc/core/channel/v1/tx.proto | 1 + 1 file changed, 1 insertion(+) diff --git a/proto/ibc/core/channel/v1/tx.proto b/proto/ibc/core/channel/v1/tx.proto index d34b00e9124..fc5404f3258 100644 --- a/proto/ibc/core/channel/v1/tx.proto +++ b/proto/ibc/core/channel/v1/tx.proto @@ -81,6 +81,7 @@ message MsgChannelOpenTry { string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; // in the case of crossing hello's, when both chains call OpenInit, we need // the channel identifier of the previous channel in state INIT + // this field has been deprecated and will be ignored by core IBC becase now we don't need protect against crossing hellos anymore . string previous_channel_id = 2 [(gogoproto.moretags) = "yaml:\"previous_channel_id\""]; // NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. Channel channel = 3 [(gogoproto.nullable) = false]; From 60195ccdf9d2b2d07371bc072c67eca27e7dba66 Mon Sep 17 00:00:00 2001 From: vuong <56973102+vuong177@users.noreply.github.com> Date: Tue, 3 May 2022 17:54:24 +0700 Subject: [PATCH 05/16] Update proto/ibc/core/channel/v1/tx.proto Co-authored-by: Aditya --- proto/ibc/core/channel/v1/tx.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/ibc/core/channel/v1/tx.proto b/proto/ibc/core/channel/v1/tx.proto index fc5404f3258..edfa0ad2050 100644 --- a/proto/ibc/core/channel/v1/tx.proto +++ b/proto/ibc/core/channel/v1/tx.proto @@ -81,7 +81,7 @@ message MsgChannelOpenTry { string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; // in the case of crossing hello's, when both chains call OpenInit, we need // the channel identifier of the previous channel in state INIT - // this field has been deprecated and will be ignored by core IBC becase now we don't need protect against crossing hellos anymore . + // this field has been deprecated and will be ignored by core IBC becase now we don't need to protect against crossing hellos anymore . string previous_channel_id = 2 [(gogoproto.moretags) = "yaml:\"previous_channel_id\""]; // NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. Channel channel = 3 [(gogoproto.nullable) = false]; From b196ca8a9b4afbfc3fcddc0cf184981bd5d614b0 Mon Sep 17 00:00:00 2001 From: vuong Date: Tue, 3 May 2022 20:14:36 +0700 Subject: [PATCH 06/16] minor fixes && UPDATE CHANGELOG.md --- CHANGELOG.md | 1 + modules/core/04-channel/keeper/handshake.go | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f699f30ff3..03f52c64aad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -54,6 +54,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (modules/core/04-channel) [\#1232](https://github.com/cosmos/ibc-go/pull/1232) Updating params on `NewPacketId` and moving to bottom of file. * (modules/core/04-channel) [\#1279](https://github.com/cosmos/ibc-go/pull/1279) Add selected channel version to MsgChanOpenInitResponse and MsgChanOpenTryResponse. Emit channel version during OpenInit/OpenTry * (app/29-fee) [\#1305](https://github.com/cosmos/ibc-go/pull/1305) Change version string for fee module to `ics29-1` +* (modules/core/04-channel) [\#1317](https://github.com/cosmos/ibc-go/pull/1317) Remove crossing hellos from ChanOpenTry ### Features diff --git a/modules/core/04-channel/keeper/handshake.go b/modules/core/04-channel/keeper/handshake.go index 2a9db853456..07d1a52cd62 100644 --- a/modules/core/04-channel/keeper/handshake.go +++ b/modules/core/04-channel/keeper/handshake.go @@ -105,17 +105,13 @@ func (k Keeper) ChanOpenTry( proofInit []byte, proofHeight exported.Height, ) (string, *capabilitytypes.Capability, error) { - var ( - channelID string - ) - // connection hops only supports a single connection if len(connectionHops) != 1 { return "", nil, sdkerrors.Wrapf(types.ErrTooManyConnectionHops, "expected 1, got %d", len(connectionHops)) } // generate a new channel - channelID = k.GenerateChannelIdentifier(ctx) + channelID := k.GenerateChannelIdentifier(ctx) if !k.portKeeper.Authenticate(ctx, portCap, portID) { return "", nil, sdkerrors.Wrapf(porttypes.ErrInvalidPort, "caller does not own port capability for port ID %s", portID) From 7890a9d7047cf11d698c460ca41fe37c9a5c2494 Mon Sep 17 00:00:00 2001 From: vuong <56973102+vuong177@users.noreply.github.com> Date: Wed, 4 May 2022 06:30:32 +0700 Subject: [PATCH 07/16] Update proto/ibc/core/channel/v1/tx.proto Co-authored-by: Carlos Rodriguez --- proto/ibc/core/channel/v1/tx.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/ibc/core/channel/v1/tx.proto b/proto/ibc/core/channel/v1/tx.proto index edfa0ad2050..45a4a9de8d1 100644 --- a/proto/ibc/core/channel/v1/tx.proto +++ b/proto/ibc/core/channel/v1/tx.proto @@ -81,7 +81,7 @@ message MsgChannelOpenTry { string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; // in the case of crossing hello's, when both chains call OpenInit, we need // the channel identifier of the previous channel in state INIT - // this field has been deprecated and will be ignored by core IBC becase now we don't need to protect against crossing hellos anymore . + // this field has been deprecated and will be ignored by core IBC because now we don't need to protect against crossing hellos anymore. string previous_channel_id = 2 [(gogoproto.moretags) = "yaml:\"previous_channel_id\""]; // NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. Channel channel = 3 [(gogoproto.nullable) = false]; From 2851cf786e6c54f27f574864c739eab72a0ece13 Mon Sep 17 00:00:00 2001 From: vuong <56973102+vuong177@users.noreply.github.com> Date: Tue, 10 May 2022 15:07:37 +0700 Subject: [PATCH 08/16] Update proto/ibc/core/channel/v1/tx.proto Co-authored-by: Damian Nolan --- proto/ibc/core/channel/v1/tx.proto | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/proto/ibc/core/channel/v1/tx.proto b/proto/ibc/core/channel/v1/tx.proto index 45a4a9de8d1..47922a56e5e 100644 --- a/proto/ibc/core/channel/v1/tx.proto +++ b/proto/ibc/core/channel/v1/tx.proto @@ -81,7 +81,7 @@ message MsgChannelOpenTry { string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; // in the case of crossing hello's, when both chains call OpenInit, we need // the channel identifier of the previous channel in state INIT - // this field has been deprecated and will be ignored by core IBC because now we don't need to protect against crossing hellos anymore. + // Deprecated: this field has been deprecated and will be ignored by core IBC because now we don't need to protect against crossing hellos anymore. string previous_channel_id = 2 [(gogoproto.moretags) = "yaml:\"previous_channel_id\""]; // NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. Channel channel = 3 [(gogoproto.nullable) = false]; From 40771a6e582d4f806880dc8942af81070a039f6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 7 Jul 2022 12:31:41 +0200 Subject: [PATCH 09/16] apply remaining changes for crossing hello removal Deprecate previous channel id with proto tag Remove unnecessary test cases from 04-channel Remove crossing hello check in transfer application and the associated test case --- CHANGELOG.md | 2 +- .../adr-006-02-client-refactor.md | 40 +++++++++++++++++++ modules/apps/29-fee/ibc_middleware_test.go | 22 ++-------- modules/apps/transfer/ibc_module.go | 11 +---- modules/apps/transfer/ibc_module_test.go | 4 +- .../core/04-channel/keeper/handshake_test.go | 14 ------- proto/ibc/core/channel/v1/tx.proto | 6 +-- testing/coordinator.go | 21 ---------- 8 files changed, 50 insertions(+), 70 deletions(-) create mode 100644 docs/architecture/adr-006-02-client-refactor.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 2f29f71a503..0de36fb4c9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -62,7 +62,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (modules/core/04-channel) [\#1232](https://github.com/cosmos/ibc-go/pull/1232) Updating params on `NewPacketId` and moving to bottom of file. * (app/29-fee) [\#1305](https://github.com/cosmos/ibc-go/pull/1305) Change version string for fee module to `ics29-1` * (app/29-fee) [\#1341](https://github.com/cosmos/ibc-go/pull/1341) Check if the fee module is locked and if the fee module is enabled before refunding all fees -* (modules/core/04-channel) [\#1317](https://github.com/cosmos/ibc-go/pull/1317) Remove crossing hellos from ChanOpenTry +* (modules/core/04-channel) [\#1317](https://github.com/cosmos/ibc-go/pull/1317) Remove corssing hellos from channel handshakes. The `PreviousChannelId` in `MsgChannelOpenTry` has been deprecated. * (transfer) [\#1414](https://github.com/cosmos/ibc-go/pull/1414) Emitting Sender address from `fungible_token_packet` events in `OnRecvPacket` and `OnAcknowledgementPacket`. * (testing/simapp) [\#1397](https://github.com/cosmos/ibc-go/pull/1397) Adding mock module to maccperms and adding check to ensure mock module is not a blocked account address. * (core/02-client) [\#1570](https://github.com/cosmos/ibc-go/pull/1570) Emitting an event when handling an upgrade client proposal. diff --git a/docs/architecture/adr-006-02-client-refactor.md b/docs/architecture/adr-006-02-client-refactor.md new file mode 100644 index 00000000000..55ff76544cb --- /dev/null +++ b/docs/architecture/adr-006-02-client-refactor.md @@ -0,0 +1,40 @@ +# ADR 006: 02-client refactor + +## Changelog +* 18 May 2022: Initial Draft + +## Status + +Accepted + +## Context + +> This section contains all the context one needs to understand the current state, and why there is a problem. It should be as succinct as possible and introduce the high level idea behind the solution. + +## Decision + +> This section explains all of the details of the proposed solution, including implementation details. +It should also describe affects / corollary items that may need to be changed as a part of this. +If the proposed change will be large, please also indicate a way to do the change to maximize ease of review. +(e.g. the optimal split of things to do between separate PR's) + +## Consequences + +> This section describes the consequences, after applying the decision. All consequences should be summarized here, not just the "positive" ones. + +### Positive + +### Negative + +### Neutral + +## References + +The primary discussion which motivated these changes was documented in issue [#284](https://github.com/cosmos/ibc-go/issues/284). + +Issues: +* {reference link} + +PRs: +* {ref} + diff --git a/modules/apps/29-fee/ibc_middleware_test.go b/modules/apps/29-fee/ibc_middleware_test.go index 6f0de4b1971..ea7cdcae8b6 100644 --- a/modules/apps/29-fee/ibc_middleware_test.go +++ b/modules/apps/29-fee/ibc_middleware_test.go @@ -141,38 +141,27 @@ func (suite *FeeTestSuite) TestOnChanOpenTry() { testCases := []struct { name string cpVersion string - crossing bool expPass bool }{ { "success - valid fee middleware version", string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})), - false, true, }, { "success - valid mock version", ibcmock.Version, - false, - true, - }, - { - "success - crossing hellos: valid fee middleware", - string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: ibcmock.Version})), - true, true, }, { "invalid fee middleware version", string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: "invalid-ics29-1", AppVersion: ibcmock.Version})), false, - false, }, { "invalid mock version", string(types.ModuleCdc.MustMarshalJSON(&types.Metadata{FeeVersion: types.Version, AppVersion: "invalid-mock-version"})), false, - false, }, } @@ -201,14 +190,9 @@ func (suite *FeeTestSuite) TestOnChanOpenTry() { ok bool err error ) - if tc.crossing { - suite.path.EndpointA.ChanOpenInit() - chanCap, ok = suite.chainA.GetSimApp().ScopedFeeMockKeeper.GetCapability(suite.chainA.GetContext(), host.ChannelCapabilityPath(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID)) - suite.Require().True(ok) - } else { - chanCap, err = suite.chainA.App.GetScopedIBCKeeper().NewCapability(suite.chainA.GetContext(), host.ChannelCapabilityPath(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID)) - suite.Require().NoError(err) - } + + chanCap, err = suite.chainA.App.GetScopedIBCKeeper().NewCapability(suite.chainA.GetContext(), host.ChannelCapabilityPath(suite.path.EndpointA.ChannelConfig.PortID, suite.path.EndpointA.ChannelID)) + suite.Require().NoError(err) suite.path.EndpointA.ChannelID = ibctesting.FirstChannelID diff --git a/modules/apps/transfer/ibc_module.go b/modules/apps/transfer/ibc_module.go index 7b87b33408c..d2b78001e99 100644 --- a/modules/apps/transfer/ibc_module.go +++ b/modules/apps/transfer/ibc_module.go @@ -111,15 +111,8 @@ func (im IBCModule) OnChanOpenTry( return "", sdkerrors.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: got: %s, expected %s", counterpartyVersion, types.Version) } - // Module may have already claimed capability in OnChanOpenInit in the case of crossing hellos - // (ie chainA and chainB both call ChanOpenInit before one of them calls ChanOpenTry) - // If module can already authenticate the capability then module already owns it so we don't need to claim - // Otherwise, module does not have channel capability and we must claim it from IBC - if !im.keeper.AuthenticateCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) { - // Only claim channel capability passed back by IBC module if we do not already own it - if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return "", err - } + if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return "", err } return types.Version, nil diff --git a/modules/apps/transfer/ibc_module_test.go b/modules/apps/transfer/ibc_module_test.go index 3b8e0175517..3ff7b25679e 100644 --- a/modules/apps/transfer/ibc_module_test.go +++ b/modules/apps/transfer/ibc_module_test.go @@ -124,10 +124,10 @@ func (suite *TransferTestSuite) TestOnChanOpenTry() { }, false, }, { - "capability already claimed in INIT should pass", func() { + "capability already claimed", func() { err := suite.chainA.GetSimApp().ScopedTransferKeeper.ClaimCapability(suite.chainA.GetContext(), chanCap, host.ChannelCapabilityPath(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)) suite.Require().NoError(err) - }, true, + }, false, }, { "invalid order - ORDERED", func() { diff --git a/modules/core/04-channel/keeper/handshake_test.go b/modules/core/04-channel/keeper/handshake_test.go index 9e62c030aba..e8750f85b05 100644 --- a/modules/core/04-channel/keeper/handshake_test.go +++ b/modules/core/04-channel/keeper/handshake_test.go @@ -157,20 +157,6 @@ func (suite *KeeperTestSuite) TestChanOpenTry() { suite.chainB.CreatePortCapability(suite.chainB.GetSimApp().ScopedIBCMockKeeper, ibctesting.MockPort) portCap = suite.chainB.GetPortCapability(ibctesting.MockPort) }, true}, - {"success with crossing hello", func() { - suite.coordinator.SetupConnections(path) - path.SetChannelOrdered() - err := suite.coordinator.ChanOpenInitOnBothChains(path) - suite.Require().NoError(err) - - portCap = suite.chainB.GetPortCapability(ibctesting.MockPort) - }, true}, - {"previous channel with invalid state", func() { - suite.coordinator.SetupConnections(path) - - // make previous channel have wrong ordering - path.EndpointA.ChanOpenInit() - }, false}, {"connection doesn't exist", func() { path.EndpointA.ConnectionID = ibctesting.FirstConnectionID path.EndpointB.ConnectionID = ibctesting.FirstConnectionID diff --git a/proto/ibc/core/channel/v1/tx.proto b/proto/ibc/core/channel/v1/tx.proto index 210b7a71732..19101aef797 100644 --- a/proto/ibc/core/channel/v1/tx.proto +++ b/proto/ibc/core/channel/v1/tx.proto @@ -79,10 +79,8 @@ message MsgChannelOpenTry { option (gogoproto.goproto_getters) = false; string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - // in the case of crossing hello's, when both chains call OpenInit, we need - // the channel identifier of the previous channel in state INIT - // Deprecated: this field has been deprecated and will be ignored by core IBC because now we don't need to protect against crossing hellos anymore. - string previous_channel_id = 2 [(gogoproto.moretags) = "yaml:\"previous_channel_id\""]; + // Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC. + string previous_channel_id = 2 [deprecated = true, (gogoproto.moretags) = "yaml:\"previous_channel_id\""]; // NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. Channel channel = 3 [(gogoproto.nullable) = false]; string counterparty_version = 4 [(gogoproto.moretags) = "yaml:\"counterparty_version\""]; diff --git a/testing/coordinator.go b/testing/coordinator.go index dde3eb56b1a..6aaf2ab748f 100644 --- a/testing/coordinator.go +++ b/testing/coordinator.go @@ -212,24 +212,3 @@ func (coord *Coordinator) ConnOpenInitOnBothChains(path *Path) error { return path.EndpointB.UpdateClient() } - -// ChanOpenInitOnBothChains initializes a channel on the source chain and counterparty chain -// with the state INIT using the OpenInit handshake call. -func (coord *Coordinator) ChanOpenInitOnBothChains(path *Path) error { - // NOTE: only creation of a capability for a transfer or mock port is supported - // Other applications must bind to the port in InitGenesis or modify this code. - - if err := path.EndpointA.ChanOpenInit(); err != nil { - return err - } - - if err := path.EndpointB.ChanOpenInit(); err != nil { - return err - } - - if err := path.EndpointA.UpdateClient(); err != nil { - return err - } - - return path.EndpointB.UpdateClient() -} From c2eecabe525b50dd2fb20065bcb2ec49f041b87e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 7 Jul 2022 12:35:22 +0200 Subject: [PATCH 10/16] remove previous channel check in WriteChannelOpenTry --- modules/core/04-channel/keeper/handshake.go | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/modules/core/04-channel/keeper/handshake.go b/modules/core/04-channel/keeper/handshake.go index 602ebc0a8f3..579ae9a25f1 100644 --- a/modules/core/04-channel/keeper/handshake.go +++ b/modules/core/04-channel/keeper/handshake.go @@ -188,18 +188,15 @@ func (k Keeper) WriteOpenTryChannel( counterparty types.Counterparty, version string, ) { - previousChannel, previousChannelFound := k.GetChannel(ctx, portID, channelID) - if !previousChannelFound { - k.SetNextSequenceSend(ctx, portID, channelID, 1) - k.SetNextSequenceRecv(ctx, portID, channelID, 1) - k.SetNextSequenceAck(ctx, portID, channelID, 1) - } + k.SetNextSequenceSend(ctx, portID, channelID, 1) + k.SetNextSequenceRecv(ctx, portID, channelID, 1) + k.SetNextSequenceAck(ctx, portID, channelID, 1) channel := types.NewChannel(types.TRYOPEN, order, counterparty, connectionHops, version) k.SetChannel(ctx, portID, channelID, channel) - k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", previousChannel.State.String(), "new-state", "TRYOPEN") + k.Logger(ctx).Info("channel state updated", "port-id", portID, "channel-id", channelID, "previous-state", "NONE", "new-state", "TRYOPEN") defer func() { telemetry.IncrCounter(1, "ibc", "channel", "open-try") From 4f7e88a94802ff6cda6ed73e812dbc2f5f9b94ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 7 Jul 2022 12:37:57 +0200 Subject: [PATCH 11/16] regenerate proto files --- docs/ibc/proto-docs.md | 2 +- modules/core/04-channel/types/tx.pb.go | 169 ++++++++++++------------- proto/ibc/core/channel/v1/tx.proto | 2 +- 3 files changed, 86 insertions(+), 87 deletions(-) diff --git a/docs/ibc/proto-docs.md b/docs/ibc/proto-docs.md index 30c6d350bd1..ced55cfbc75 100644 --- a/docs/ibc/proto-docs.md +++ b/docs/ibc/proto-docs.md @@ -2949,7 +2949,7 @@ value will be ignored by core IBC. | Field | Type | Label | Description | | ----- | ---- | ----- | ----------- | | `port_id` | [string](#string) | | | -| `previous_channel_id` | [string](#string) | | in the case of crossing hello's, when both chains call OpenInit, we need the channel identifier of the previous channel in state INIT | +| `previous_channel_id` | [string](#string) | | **Deprecated.** Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC. | | `channel` | [Channel](#ibc.core.channel.v1.Channel) | | NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. | | `counterparty_version` | [string](#string) | | | | `proof_init` | [bytes](#bytes) | | | diff --git a/modules/core/04-channel/types/tx.pb.go b/modules/core/04-channel/types/tx.pb.go index 4c8d176bd15..6ad733decee 100644 --- a/modules/core/04-channel/types/tx.pb.go +++ b/modules/core/04-channel/types/tx.pb.go @@ -160,9 +160,8 @@ func (m *MsgChannelOpenInitResponse) GetVersion() string { // value will be ignored by core IBC. type MsgChannelOpenTry struct { PortId string `protobuf:"bytes,1,opt,name=port_id,json=portId,proto3" json:"port_id,omitempty" yaml:"port_id"` - // in the case of crossing hello's, when both chains call OpenInit, we need - // the channel identifier of the previous channel in state INIT - PreviousChannelId string `protobuf:"bytes,2,opt,name=previous_channel_id,json=previousChannelId,proto3" json:"previous_channel_id,omitempty" yaml:"previous_channel_id"` + // Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC. + PreviousChannelId string `protobuf:"bytes,2,opt,name=previous_channel_id,json=previousChannelId,proto3" json:"previous_channel_id,omitempty" yaml:"previous_channel_id"` // Deprecated: Do not use. // NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. Channel Channel `protobuf:"bytes,3,opt,name=channel,proto3" json:"channel"` CounterpartyVersion string `protobuf:"bytes,4,opt,name=counterparty_version,json=counterpartyVersion,proto3" json:"counterparty_version,omitempty" yaml:"counterparty_version"` @@ -918,88 +917,88 @@ func init() { func init() { proto.RegisterFile("ibc/core/channel/v1/tx.proto", fileDescriptor_bc4637e0ac3fc7b7) } var fileDescriptor_bc4637e0ac3fc7b7 = []byte{ - // 1294 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4d, 0x6f, 0xe2, 0x56, - 0x17, 0xc6, 0x40, 0x20, 0x39, 0xe4, 0x4d, 0x88, 0x49, 0x32, 0xc4, 0x24, 0x98, 0xd7, 0x8b, 0x49, - 0x94, 0x2a, 0x30, 0xc9, 0x64, 0x54, 0x4d, 0x54, 0xa9, 0x0a, 0x94, 0x51, 0xa3, 0x36, 0x1f, 0x32, - 0xa4, 0x52, 0xd3, 0xaa, 0x08, 0xcc, 0x1d, 0x62, 0x01, 0x36, 0xb5, 0x0d, 0x33, 0xfc, 0x83, 0x51, - 0x56, 0xb3, 0x1e, 0x29, 0xd2, 0x54, 0x5d, 0x55, 0x5d, 0x4c, 0x7f, 0xc6, 0x2c, 0x67, 0xd5, 0x56, - 0x5d, 0xa0, 0x2a, 0xd9, 0x74, 0xcd, 0x2f, 0xa8, 0x7c, 0x7d, 0x6d, 0x0c, 0xd8, 0x8a, 0x33, 0x93, - 0x64, 0xba, 0xf3, 0xbd, 0xe7, 0xb9, 0xe7, 0x9c, 0xfb, 0x9c, 0xe7, 0x7e, 0x19, 0x96, 0xc5, 0x8a, - 0x90, 0x11, 0x64, 0x05, 0x65, 0x84, 0xd3, 0xb2, 0x24, 0xa1, 0x46, 0xa6, 0xb3, 0x99, 0xd1, 0x9e, - 0xa7, 0x5b, 0x8a, 0xac, 0xc9, 0x74, 0x4c, 0xac, 0x08, 0x69, 0xdd, 0x9a, 0x26, 0xd6, 0x74, 0x67, - 0x93, 0x99, 0xaf, 0xc9, 0x35, 0x19, 0xdb, 0x33, 0xfa, 0x97, 0x01, 0x65, 0xd8, 0x81, 0xa3, 0x86, - 0x88, 0x24, 0x4d, 0xf7, 0x63, 0x7c, 0x11, 0xc0, 0xff, 0x9d, 0x22, 0x99, 0x6e, 0x31, 0x84, 0xfb, - 0x89, 0x02, 0x7a, 0x5f, 0xad, 0xe5, 0x8c, 0xce, 0xc3, 0x16, 0x92, 0xf6, 0x24, 0x51, 0xa3, 0x3f, - 0x81, 0x70, 0x4b, 0x56, 0xb4, 0x92, 0x58, 0x8d, 0x53, 0x29, 0x6a, 0x6d, 0x2a, 0x4b, 0xf7, 0x7b, - 0xec, 0x4c, 0xb7, 0xdc, 0x6c, 0xec, 0x70, 0xc4, 0xc0, 0xf1, 0x21, 0xfd, 0x6b, 0xaf, 0x4a, 0x7f, - 0x06, 0x61, 0xe2, 0x34, 0xee, 0x4f, 0x51, 0x6b, 0x91, 0xad, 0xe5, 0xb4, 0xc3, 0x24, 0xd2, 0x24, - 0x46, 0x36, 0xf8, 0xb6, 0xc7, 0xfa, 0x78, 0x73, 0x08, 0xbd, 0x08, 0x21, 0x55, 0xac, 0x49, 0x48, - 0x89, 0x07, 0xf4, 0x48, 0x3c, 0x69, 0xed, 0x4c, 0xbe, 0x78, 0xcd, 0xfa, 0xfe, 0x79, 0xcd, 0xfa, - 0xb8, 0x06, 0x30, 0xe3, 0x29, 0xf2, 0x48, 0x6d, 0xc9, 0x92, 0x8a, 0xe8, 0x6d, 0x00, 0xe2, 0x6a, - 0x90, 0xed, 0x42, 0xbf, 0xc7, 0xce, 0x19, 0xd9, 0x0e, 0x6c, 0x1c, 0x3f, 0x45, 0x1a, 0x7b, 0x55, - 0x3a, 0x0e, 0xe1, 0x0e, 0x52, 0x54, 0x51, 0x96, 0x70, 0xce, 0x53, 0xbc, 0xd9, 0xe4, 0x7e, 0x0f, - 0xc0, 0xdc, 0x70, 0xb8, 0xa2, 0xd2, 0xbd, 0x1e, 0x21, 0x07, 0x10, 0x6b, 0x29, 0xa8, 0x23, 0xca, - 0x6d, 0xb5, 0x64, 0xcb, 0x0d, 0x07, 0xca, 0x26, 0xfb, 0x3d, 0x96, 0x21, 0x03, 0xc7, 0x41, 0x1c, - 0x3f, 0x67, 0xf6, 0xe6, 0xac, 0x64, 0x6d, 0x04, 0x07, 0xae, 0x4f, 0x30, 0x0f, 0xf3, 0x82, 0xdc, - 0x96, 0x34, 0xa4, 0xb4, 0xca, 0x8a, 0xd6, 0x2d, 0x99, 0xf3, 0x0e, 0xe2, 0x74, 0xd8, 0x7e, 0x8f, - 0x4d, 0x10, 0xaa, 0x1c, 0x50, 0x1c, 0x1f, 0xb3, 0x77, 0x7f, 0x63, 0xf4, 0xea, 0xa4, 0xb7, 0x14, - 0x59, 0x7e, 0x5a, 0x12, 0x25, 0x51, 0x8b, 0x4f, 0xa4, 0xa8, 0xb5, 0x69, 0x3b, 0xe9, 0x03, 0x1b, - 0xc7, 0x4f, 0xe1, 0x06, 0x56, 0xd5, 0x09, 0x4c, 0x1b, 0x96, 0x53, 0x24, 0xd6, 0x4e, 0xb5, 0x78, - 0x08, 0x4f, 0x86, 0xb1, 0x4d, 0xc6, 0x50, 0x6f, 0x67, 0x33, 0xfd, 0x25, 0x46, 0x64, 0x13, 0xfa, - 0x54, 0xfa, 0x3d, 0x36, 0x66, 0xf7, 0x6b, 0x8c, 0xe6, 0xf8, 0x08, 0x6e, 0x1a, 0x48, 0x9b, 0x8c, - 0xc2, 0x2e, 0x32, 0x7a, 0x04, 0x4b, 0x63, 0x75, 0xb5, 0x54, 0x64, 0xd3, 0x03, 0x35, 0xac, 0x87, - 0x3f, 0xc6, 0xf4, 0xb0, 0x2b, 0xd4, 0xaf, 0xa7, 0x87, 0x61, 0x89, 0xfa, 0x3d, 0x4a, 0xf4, 0x04, - 0xee, 0x0d, 0x55, 0xc4, 0xe6, 0x02, 0xaf, 0x94, 0x2c, 0xd7, 0xef, 0xb1, 0x49, 0x87, 0xd2, 0xd9, - 0xfd, 0x2d, 0xd8, 0x2d, 0x03, 0x45, 0xdd, 0x86, 0x26, 0x36, 0xc1, 0x28, 0x75, 0x49, 0x53, 0xba, - 0x44, 0x12, 0xf3, 0xfd, 0x1e, 0x1b, 0xb5, 0x97, 0x4e, 0x53, 0xba, 0x1c, 0x3f, 0x89, 0xbf, 0xf5, - 0x55, 0xf5, 0x71, 0x05, 0x91, 0x18, 0x15, 0xc4, 0xae, 0x50, 0x37, 0x05, 0xc1, 0xfd, 0xea, 0x87, - 0x85, 0x61, 0x6b, 0x4e, 0x96, 0x9e, 0x8a, 0x4a, 0xf3, 0x2e, 0x4a, 0x6f, 0x51, 0x59, 0x16, 0xea, - 0xb8, 0xd8, 0x0e, 0x54, 0x96, 0x85, 0xba, 0x49, 0xa5, 0x2e, 0xc8, 0x51, 0x2a, 0x83, 0xb7, 0x42, - 0xe5, 0x84, 0x0b, 0x95, 0x2c, 0xac, 0x38, 0x92, 0x65, 0xd1, 0xf9, 0x8a, 0x82, 0xd8, 0x00, 0x91, - 0x6b, 0xc8, 0x2a, 0xba, 0xfe, 0x41, 0xf3, 0x7e, 0x64, 0x5e, 0x7d, 0xc0, 0xac, 0x40, 0xc2, 0x21, - 0x37, 0x2b, 0xf7, 0x37, 0x7e, 0x58, 0x1c, 0xb1, 0xdf, 0xa1, 0x16, 0x86, 0xb7, 0xda, 0xc0, 0x7b, - 0x6e, 0xb5, 0x77, 0x2b, 0x87, 0x14, 0x24, 0x9d, 0x09, 0xb3, 0x38, 0x7d, 0xe9, 0x87, 0xff, 0xed, - 0xab, 0x35, 0x1e, 0x09, 0x9d, 0xa3, 0xb2, 0x50, 0x47, 0x1a, 0xfd, 0x18, 0x42, 0x2d, 0xfc, 0x85, - 0x99, 0x8c, 0x6c, 0x25, 0x1c, 0xcf, 0x38, 0x03, 0x4c, 0x8e, 0x38, 0x32, 0x80, 0x7e, 0x02, 0x51, - 0x23, 0x5d, 0x41, 0x6e, 0x36, 0x45, 0xad, 0x89, 0x24, 0x0d, 0xd3, 0x3b, 0x9d, 0x4d, 0xf4, 0x7b, - 0xec, 0x3d, 0xfb, 0x84, 0x06, 0x08, 0x8e, 0x9f, 0xc5, 0x5d, 0x39, 0xab, 0x67, 0x8c, 0xb4, 0xc0, - 0xad, 0x90, 0x16, 0x74, 0x21, 0xed, 0x07, 0xbc, 0xe1, 0x0c, 0x18, 0xb1, 0xce, 0xa6, 0xcf, 0x21, - 0xa4, 0x20, 0xb5, 0xdd, 0x30, 0x98, 0x99, 0xd9, 0x5a, 0x75, 0x64, 0xc6, 0x84, 0xf3, 0x18, 0x5a, - 0xec, 0xb6, 0x10, 0x4f, 0x86, 0xed, 0x04, 0xf5, 0x18, 0xdc, 0x5f, 0x7e, 0x80, 0x7d, 0xb5, 0x56, - 0x14, 0x9b, 0x48, 0x6e, 0xdf, 0x0c, 0xdf, 0x6d, 0x49, 0x41, 0x02, 0x12, 0x3b, 0xa8, 0xea, 0xc6, - 0xf7, 0x00, 0x61, 0xf2, 0x7d, 0x6c, 0xf5, 0xdc, 0x2a, 0xdf, 0x5f, 0x01, 0x2d, 0xa1, 0xe7, 0x5a, - 0x49, 0x45, 0x3f, 0xb6, 0x91, 0x24, 0xa0, 0x92, 0x82, 0x84, 0x0e, 0xe6, 0x3e, 0x98, 0x5d, 0xe9, - 0xf7, 0xd8, 0x25, 0xc3, 0xc3, 0x38, 0x86, 0xe3, 0xa3, 0x7a, 0x67, 0x81, 0xf4, 0xe9, 0xf5, 0xf0, - 0xa0, 0xf8, 0xef, 0xf0, 0x35, 0x9a, 0x70, 0x7b, 0xd3, 0x95, 0x7b, 0x65, 0x5c, 0x41, 0x88, 0xf7, - 0x43, 0x09, 0xaf, 0xa8, 0xff, 0x42, 0x01, 0x3f, 0x85, 0x08, 0x59, 0x56, 0x7a, 0x46, 0x64, 0x73, - 0x5a, 0xec, 0xf7, 0x58, 0x7a, 0x68, 0xcd, 0xe9, 0x46, 0x8e, 0x37, 0xb6, 0x31, 0x23, 0xf7, 0xdb, - 0xdc, 0x9e, 0x9c, 0x2b, 0x3f, 0xf1, 0xa1, 0x95, 0x0f, 0xb9, 0x54, 0xbe, 0x82, 0x6f, 0x11, 0xc3, - 0xb5, 0xb9, 0x69, 0x01, 0xfc, 0xe6, 0xc7, 0xf2, 0xda, 0x15, 0xea, 0x92, 0xfc, 0xac, 0x81, 0xaa, - 0x35, 0x84, 0xf7, 0xab, 0x0f, 0x50, 0xc0, 0x1a, 0xcc, 0x96, 0x87, 0xbd, 0x19, 0x02, 0xe0, 0x47, - 0xbb, 0x07, 0x35, 0xd6, 0x07, 0x56, 0xdd, 0x6a, 0x8c, 0x8d, 0x66, 0x8d, 0x77, 0xf5, 0xc6, 0x47, - 0x3e, 0x82, 0x04, 0xfc, 0x68, 0x1c, 0x61, 0xec, 0x86, 0xeb, 0xb2, 0xfe, 0x0b, 0x05, 0xf4, 0x38, - 0x88, 0x7e, 0x04, 0x29, 0x3e, 0x5f, 0x38, 0x3a, 0x3c, 0x28, 0xe4, 0x4b, 0x7c, 0xbe, 0x70, 0xfc, - 0x75, 0xb1, 0x54, 0xfc, 0xf6, 0x28, 0x5f, 0x3a, 0x3e, 0x28, 0x1c, 0xe5, 0x73, 0x7b, 0x4f, 0xf6, - 0xf2, 0x5f, 0x44, 0x7d, 0xcc, 0xec, 0xd9, 0x79, 0x2a, 0x62, 0xeb, 0xa2, 0x57, 0x61, 0xc9, 0x71, - 0xd8, 0xc1, 0xe1, 0xe1, 0x51, 0x94, 0x62, 0x26, 0xcf, 0xce, 0x53, 0x41, 0xfd, 0x9b, 0xde, 0x80, - 0x65, 0x47, 0x60, 0xe1, 0x38, 0x97, 0xcb, 0x17, 0x0a, 0x51, 0x3f, 0x13, 0x39, 0x3b, 0x4f, 0x85, - 0x49, 0x93, 0x09, 0xbe, 0xf8, 0x39, 0xe9, 0xdb, 0x7a, 0x33, 0x09, 0x81, 0x7d, 0xb5, 0x46, 0xd7, - 0x61, 0x76, 0xf4, 0xb5, 0xef, 0x3c, 0xfb, 0xf1, 0x37, 0x37, 0x93, 0xf1, 0x08, 0xb4, 0x78, 0x3e, - 0x85, 0x99, 0x91, 0x87, 0xf4, 0x7d, 0x0f, 0x2e, 0x8a, 0x4a, 0x97, 0x49, 0x7b, 0xc3, 0xb9, 0x44, - 0xd2, 0x6f, 0xc4, 0x5e, 0x22, 0xed, 0x0a, 0x75, 0x4f, 0x91, 0x6c, 0x2f, 0x03, 0x5a, 0x03, 0xda, - 0xe1, 0x55, 0xb0, 0xee, 0xc1, 0x0b, 0xc1, 0x32, 0x5b, 0xde, 0xb1, 0x56, 0x54, 0x09, 0xa2, 0x63, - 0x97, 0xe7, 0xb5, 0x2b, 0xfc, 0x58, 0x48, 0xe6, 0x81, 0x57, 0xa4, 0x15, 0xef, 0x19, 0xc4, 0x1c, - 0x2f, 0xbc, 0x5e, 0x1c, 0x99, 0xf3, 0x7c, 0x78, 0x0d, 0xb0, 0x15, 0xf8, 0x7b, 0x00, 0xdb, 0xad, - 0x90, 0x73, 0x73, 0x31, 0xc0, 0x30, 0xeb, 0x57, 0x63, 0x2c, 0xef, 0x05, 0x08, 0x9b, 0x17, 0x20, - 0xd6, 0x6d, 0x18, 0x01, 0x30, 0xab, 0x57, 0x00, 0xec, 0xda, 0x1b, 0x39, 0x9b, 0xef, 0x5f, 0x31, - 0x94, 0xe0, 0xdc, 0xb5, 0xe7, 0x72, 0x9e, 0xd4, 0x61, 0x76, 0xf4, 0x10, 0x70, 0xcd, 0x72, 0x04, - 0xe8, 0xbe, 0x78, 0x5d, 0x36, 0xc9, 0x6c, 0xe1, 0xed, 0x45, 0x92, 0x7a, 0x77, 0x91, 0xa4, 0xfe, - 0xbe, 0x48, 0x52, 0x2f, 0x2f, 0x93, 0xbe, 0x77, 0x97, 0x49, 0xdf, 0x9f, 0x97, 0x49, 0xdf, 0xc9, - 0xe3, 0x9a, 0xa8, 0x9d, 0xb6, 0x2b, 0x69, 0x41, 0x6e, 0x66, 0x04, 0x59, 0x6d, 0xca, 0x6a, 0x46, - 0xac, 0x08, 0x1b, 0x35, 0x39, 0xd3, 0xd9, 0xce, 0x34, 0xe5, 0x6a, 0xbb, 0x81, 0x54, 0xe3, 0xc7, - 0xe3, 0x83, 0xed, 0x0d, 0xf3, 0xdf, 0xa3, 0xd6, 0x6d, 0x21, 0xb5, 0x12, 0xc2, 0xff, 0x1d, 0x1f, - 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x4f, 0x1a, 0x39, 0xd7, 0x06, 0x15, 0x00, 0x00, + // 1295 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xdf, 0x6f, 0xda, 0xd6, + 0x17, 0xc7, 0x40, 0x21, 0x39, 0xf4, 0x9b, 0x10, 0x93, 0xa4, 0xc4, 0x24, 0x98, 0xaf, 0x1f, 0x9a, + 0x28, 0x53, 0xa0, 0x49, 0x53, 0x4d, 0x8d, 0x26, 0x4d, 0x81, 0x51, 0x2d, 0xda, 0x92, 0x20, 0x43, + 0x26, 0x2d, 0x9b, 0x86, 0xc0, 0xdc, 0x12, 0x0b, 0xb0, 0x99, 0x6d, 0x68, 0xf9, 0x0f, 0xaa, 0x3c, + 0xf5, 0xb9, 0x52, 0xa4, 0x4e, 0x7b, 0x9a, 0xf6, 0xd0, 0xfd, 0x19, 0x7d, 0xec, 0xdb, 0xaa, 0x3d, + 0xa0, 0x29, 0x79, 0xd9, 0x33, 0x7f, 0xc1, 0xe4, 0xeb, 0x6b, 0x63, 0xc0, 0x56, 0x9c, 0x36, 0x49, + 0xf7, 0xe6, 0x7b, 0xcf, 0xe7, 0x9e, 0x73, 0xee, 0xe7, 0x7c, 0xee, 0x2f, 0xc3, 0xb2, 0x58, 0x15, + 0x32, 0x82, 0xac, 0xa0, 0x8c, 0x70, 0x52, 0x91, 0x24, 0xd4, 0xcc, 0x74, 0x37, 0x33, 0xda, 0xf3, + 0x74, 0x5b, 0x91, 0x35, 0x99, 0x8e, 0x89, 0x55, 0x21, 0xad, 0x5b, 0xd3, 0xc4, 0x9a, 0xee, 0x6e, + 0x32, 0xf3, 0x75, 0xb9, 0x2e, 0x63, 0x7b, 0x46, 0xff, 0x32, 0xa0, 0x0c, 0x3b, 0x74, 0xd4, 0x14, + 0x91, 0xa4, 0xe9, 0x7e, 0x8c, 0x2f, 0x02, 0xf8, 0xbf, 0x53, 0x24, 0xd3, 0x2d, 0x86, 0x70, 0xbf, + 0x50, 0x40, 0xef, 0xab, 0xf5, 0x9c, 0xd1, 0x79, 0xd8, 0x46, 0xd2, 0x9e, 0x24, 0x6a, 0xf4, 0x67, + 0x10, 0x6e, 0xcb, 0x8a, 0x56, 0x16, 0x6b, 0x71, 0x2a, 0x45, 0xad, 0x4d, 0x67, 0xe9, 0x41, 0x9f, + 0x9d, 0xe9, 0x55, 0x5a, 0xcd, 0x1d, 0x8e, 0x18, 0x38, 0x3e, 0xa4, 0x7f, 0xed, 0xd5, 0xe8, 0x2f, + 0x20, 0x4c, 0x9c, 0xc6, 0xfd, 0x29, 0x6a, 0x2d, 0xb2, 0xb5, 0x9c, 0x76, 0x98, 0x44, 0x9a, 0xc4, + 0xc8, 0x06, 0xdf, 0xf6, 0x59, 0x1f, 0x6f, 0x0e, 0xa1, 0x17, 0x21, 0xa4, 0x8a, 0x75, 0x09, 0x29, + 0xf1, 0x80, 0x1e, 0x89, 0x27, 0xad, 0x9d, 0xa9, 0x17, 0xaf, 0x59, 0xdf, 0x3f, 0xaf, 0x59, 0x1f, + 0xd7, 0x04, 0x66, 0x32, 0x45, 0x1e, 0xa9, 0x6d, 0x59, 0x52, 0x11, 0xbd, 0x0d, 0x40, 0x5c, 0x0d, + 0xb3, 0x5d, 0x18, 0xf4, 0xd9, 0x39, 0x23, 0xdb, 0xa1, 0x8d, 0xe3, 0xa7, 0x49, 0x63, 0xaf, 0x46, + 0xc7, 0x21, 0xdc, 0x45, 0x8a, 0x2a, 0xca, 0x12, 0xce, 0x79, 0x9a, 0x37, 0x9b, 0xdc, 0xfb, 0x00, + 0xcc, 0x8d, 0x86, 0x2b, 0x29, 0xbd, 0xab, 0x11, 0x52, 0x80, 0x58, 0x5b, 0x41, 0x5d, 0x51, 0xee, + 0xa8, 0x65, 0x5b, 0x6e, 0x38, 0x50, 0x36, 0x35, 0xe8, 0xb3, 0x0c, 0x19, 0x38, 0x09, 0xe2, 0xe2, + 0x14, 0x3f, 0x67, 0xf6, 0xe7, 0xac, 0x74, 0x6d, 0x14, 0x07, 0xae, 0x4e, 0x31, 0x0f, 0xf3, 0x82, + 0xdc, 0x91, 0x34, 0xa4, 0xb4, 0x2b, 0x8a, 0xd6, 0x2b, 0x9b, 0x33, 0x0f, 0xe2, 0x84, 0xd8, 0x41, + 0x9f, 0x4d, 0x10, 0xb2, 0x1c, 0x50, 0x1c, 0x1f, 0xb3, 0x77, 0x7f, 0x67, 0xf4, 0xea, 0xb4, 0xb7, + 0x15, 0x59, 0x7e, 0x5a, 0x16, 0x25, 0x51, 0x8b, 0xdf, 0x49, 0x51, 0x6b, 0x77, 0xed, 0xb4, 0x0f, + 0x6d, 0x1c, 0x3f, 0x8d, 0x1b, 0x58, 0x57, 0xc7, 0x70, 0xd7, 0xb0, 0x9c, 0x20, 0xb1, 0x7e, 0xa2, + 0xc5, 0x43, 0x78, 0x32, 0x8c, 0x6d, 0x32, 0x86, 0x7e, 0xbb, 0x9b, 0xe9, 0xaf, 0x31, 0x22, 0x9b, + 0xd0, 0xa7, 0x32, 0xe8, 0xb3, 0x31, 0xbb, 0x5f, 0x63, 0x34, 0xc7, 0x47, 0x70, 0xd3, 0x40, 0xda, + 0x84, 0x14, 0x76, 0x11, 0xd2, 0x23, 0x58, 0x9a, 0xa8, 0xac, 0xa5, 0x23, 0x9b, 0x22, 0xa8, 0x51, + 0x45, 0xfc, 0x39, 0xa1, 0x88, 0x5d, 0xa1, 0x71, 0x35, 0x45, 0x8c, 0x8a, 0xd4, 0xef, 0x51, 0xa4, + 0xc7, 0x70, 0x6f, 0xa4, 0x22, 0x36, 0x17, 0x78, 0xad, 0x64, 0xb9, 0x41, 0x9f, 0x4d, 0x3a, 0x94, + 0xce, 0xee, 0x6f, 0xc1, 0x6e, 0x19, 0x2a, 0xea, 0x26, 0x34, 0xb1, 0x09, 0x46, 0xa9, 0xcb, 0x9a, + 0xd2, 0x23, 0x92, 0x98, 0x1f, 0xf4, 0xd9, 0xa8, 0xbd, 0x74, 0x9a, 0xd2, 0xe3, 0xf8, 0x29, 0xfc, + 0xad, 0xaf, 0xab, 0x4f, 0x2b, 0x88, 0xc4, 0xb8, 0x20, 0x76, 0x85, 0x86, 0x29, 0x08, 0xee, 0x77, + 0x3f, 0x2c, 0x8c, 0x5a, 0x73, 0xb2, 0xf4, 0x54, 0x54, 0x5a, 0xb7, 0x51, 0x7a, 0x8b, 0xca, 0x8a, + 0xd0, 0xc0, 0xc5, 0x76, 0xa0, 0xb2, 0x22, 0x34, 0x4c, 0x2a, 0x75, 0x41, 0x8e, 0x53, 0x19, 0xbc, + 0x11, 0x2a, 0xef, 0xb8, 0x50, 0xc9, 0xc2, 0x8a, 0x23, 0x59, 0x16, 0x9d, 0xaf, 0x28, 0x88, 0x0d, + 0x11, 0xb9, 0xa6, 0xac, 0xa2, 0xab, 0x1f, 0x35, 0x1f, 0x46, 0xe6, 0xe5, 0x47, 0xcc, 0x0a, 0x24, + 0x1c, 0x72, 0xb3, 0x72, 0x7f, 0xe3, 0x87, 0xc5, 0x31, 0xfb, 0x2d, 0x6a, 0x61, 0x74, 0xab, 0x0d, + 0x7c, 0xe0, 0x56, 0x7b, 0xbb, 0x72, 0x48, 0x41, 0xd2, 0x99, 0x30, 0x8b, 0xd3, 0x97, 0x7e, 0xf8, + 0xdf, 0xbe, 0x5a, 0xe7, 0x91, 0xd0, 0x2d, 0x54, 0x84, 0x06, 0xd2, 0xe8, 0xc7, 0x10, 0x6a, 0xe3, + 0x2f, 0xcc, 0x64, 0x64, 0x2b, 0xe1, 0x78, 0xc6, 0x19, 0x60, 0x72, 0xc4, 0x91, 0x01, 0xf4, 0x13, + 0x88, 0x1a, 0xe9, 0x0a, 0x72, 0xab, 0x25, 0x6a, 0x2d, 0x24, 0x69, 0x98, 0xde, 0xbb, 0xd9, 0xc4, + 0xa0, 0xcf, 0xde, 0xb3, 0x4f, 0x68, 0x88, 0xe0, 0xf8, 0x59, 0xdc, 0x95, 0xb3, 0x7a, 0x26, 0x48, + 0x0b, 0xdc, 0x08, 0x69, 0x41, 0x17, 0xd2, 0x7e, 0xc2, 0x1b, 0xce, 0x90, 0x11, 0xeb, 0x6c, 0xfa, + 0x12, 0x42, 0x0a, 0x52, 0x3b, 0x4d, 0x83, 0x99, 0x99, 0xad, 0x55, 0x47, 0x66, 0x4c, 0x38, 0x8f, + 0xa1, 0xa5, 0x5e, 0x1b, 0xf1, 0x64, 0xd8, 0x4e, 0x50, 0x8f, 0xc1, 0xfd, 0xe5, 0x07, 0xd8, 0x57, + 0xeb, 0x25, 0xb1, 0x85, 0xe4, 0xce, 0xf5, 0xf0, 0xdd, 0x91, 0x14, 0x24, 0x20, 0xb1, 0x8b, 0x6a, + 0x6e, 0x7c, 0x0f, 0x11, 0x26, 0xdf, 0x47, 0x56, 0xcf, 0x8d, 0xf2, 0xfd, 0x0d, 0xd0, 0x12, 0x7a, + 0xae, 0x95, 0x55, 0xf4, 0x73, 0x07, 0x49, 0x02, 0x2a, 0x2b, 0x48, 0xe8, 0x62, 0xee, 0x83, 0xd9, + 0x95, 0x41, 0x9f, 0x5d, 0x32, 0x3c, 0x4c, 0x62, 0x38, 0x3e, 0xaa, 0x77, 0x16, 0x49, 0x9f, 0x5e, + 0x0f, 0x0f, 0x8a, 0xff, 0x01, 0x5f, 0xa4, 0x09, 0xb7, 0xd7, 0x5d, 0xb9, 0x57, 0xc6, 0x15, 0x84, + 0x78, 0x3f, 0x94, 0xf0, 0x8a, 0xfa, 0x2f, 0x14, 0xf0, 0x73, 0x88, 0x90, 0x65, 0xa5, 0x67, 0x44, + 0x36, 0xa7, 0xc5, 0x41, 0x9f, 0xa5, 0x47, 0xd6, 0x9c, 0x6e, 0xe4, 0x78, 0x63, 0x1b, 0x33, 0x72, + 0xbf, 0xc9, 0xed, 0xc9, 0xb9, 0xf2, 0x77, 0x3e, 0xb6, 0xf2, 0x21, 0x97, 0xca, 0x57, 0xf1, 0x2d, + 0x62, 0xb4, 0x36, 0xd7, 0x2d, 0x80, 0x3f, 0xfc, 0x58, 0x5e, 0xbb, 0x42, 0x43, 0x92, 0x9f, 0x35, + 0x51, 0xad, 0x8e, 0xf0, 0x7e, 0xf5, 0x11, 0x0a, 0x58, 0x83, 0xd9, 0xca, 0xa8, 0x37, 0x43, 0x00, + 0xfc, 0x78, 0xf7, 0xb0, 0xc6, 0xfa, 0xc0, 0x9a, 0x5b, 0x8d, 0xb1, 0xd1, 0xac, 0xf1, 0xae, 0xde, + 0xf8, 0xc4, 0x47, 0x90, 0x80, 0x9f, 0x8d, 0x63, 0x8c, 0x5d, 0x73, 0x5d, 0xd6, 0x7f, 0xa3, 0x80, + 0x9e, 0x04, 0xd1, 0x8f, 0x20, 0xc5, 0xe7, 0x8b, 0x85, 0xc3, 0x83, 0x62, 0xbe, 0xcc, 0xe7, 0x8b, + 0x47, 0xdf, 0x96, 0xca, 0xa5, 0xef, 0x0b, 0xf9, 0xf2, 0xd1, 0x41, 0xb1, 0x90, 0xcf, 0xed, 0x3d, + 0xd9, 0xcb, 0x7f, 0x15, 0xf5, 0x31, 0xb3, 0xa7, 0x67, 0xa9, 0x88, 0xad, 0x8b, 0x5e, 0x85, 0x25, + 0xc7, 0x61, 0x07, 0x87, 0x87, 0x85, 0x28, 0xc5, 0x4c, 0x9d, 0x9e, 0xa5, 0x82, 0xfa, 0x37, 0xbd, + 0x01, 0xcb, 0x8e, 0xc0, 0xe2, 0x51, 0x2e, 0x97, 0x2f, 0x16, 0xa3, 0x7e, 0x26, 0x72, 0x7a, 0x96, + 0x0a, 0x93, 0x26, 0x13, 0x7c, 0xf1, 0x6b, 0xd2, 0xb7, 0xf5, 0x66, 0x0a, 0x02, 0xfb, 0x6a, 0x9d, + 0x6e, 0xc0, 0xec, 0xf8, 0x7b, 0xdf, 0x79, 0xf6, 0x93, 0xaf, 0x6e, 0x26, 0xe3, 0x11, 0x68, 0xf1, + 0x7c, 0x02, 0x33, 0x63, 0x4f, 0xe9, 0xfb, 0x1e, 0x5c, 0x94, 0x94, 0x1e, 0x93, 0xf6, 0x86, 0x73, + 0x89, 0xa4, 0xdf, 0x88, 0xbd, 0x44, 0xda, 0x15, 0x1a, 0x9e, 0x22, 0xd9, 0x5e, 0x06, 0xb4, 0x06, + 0xb4, 0xc3, 0xab, 0x60, 0xdd, 0x83, 0x17, 0x82, 0x65, 0xb6, 0xbc, 0x63, 0xad, 0xa8, 0x12, 0x44, + 0x27, 0x2e, 0xcf, 0x6b, 0x97, 0xf8, 0xb1, 0x90, 0xcc, 0x03, 0xaf, 0x48, 0x2b, 0xde, 0x33, 0x88, + 0x39, 0x5e, 0x78, 0xbd, 0x38, 0x32, 0xe7, 0xf9, 0xf0, 0x0a, 0x60, 0x2b, 0xf0, 0x8f, 0x00, 0xb6, + 0x5b, 0x21, 0xe7, 0xe6, 0x62, 0x88, 0x61, 0xd6, 0x2f, 0xc7, 0x58, 0xde, 0x8b, 0x10, 0x36, 0x2f, + 0x40, 0xac, 0xdb, 0x30, 0x02, 0x60, 0x56, 0x2f, 0x01, 0xd8, 0xb5, 0x37, 0x76, 0x36, 0xdf, 0xbf, + 0x64, 0x28, 0xc1, 0xb9, 0x6b, 0xcf, 0xe5, 0x3c, 0x69, 0xc0, 0xec, 0xf8, 0x21, 0xe0, 0x9a, 0xe5, + 0x18, 0xd0, 0x7d, 0xf1, 0xba, 0x6c, 0x92, 0xd9, 0xe2, 0xdb, 0xf3, 0x24, 0xf5, 0xee, 0x3c, 0x49, + 0xfd, 0x7d, 0x9e, 0xa4, 0x5e, 0x5e, 0x24, 0x7d, 0xef, 0x2e, 0x92, 0xbe, 0xf7, 0x17, 0x49, 0xdf, + 0xf1, 0xe3, 0xba, 0xa8, 0x9d, 0x74, 0xaa, 0x69, 0x41, 0x6e, 0x65, 0x04, 0x59, 0x6d, 0xc9, 0x6a, + 0x46, 0xac, 0x0a, 0x1b, 0x75, 0x39, 0xd3, 0xdd, 0xce, 0xb4, 0xe4, 0x5a, 0xa7, 0x89, 0x54, 0xe3, + 0xd7, 0xe3, 0x83, 0xed, 0x0d, 0xf3, 0xef, 0xa3, 0xd6, 0x6b, 0x23, 0xb5, 0x1a, 0xc2, 0x7f, 0x1e, + 0x1f, 0xfe, 0x1b, 0x00, 0x00, 0xff, 0xff, 0x58, 0xd3, 0x8a, 0x27, 0x08, 0x15, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. diff --git a/proto/ibc/core/channel/v1/tx.proto b/proto/ibc/core/channel/v1/tx.proto index 19101aef797..75248aeb5b1 100644 --- a/proto/ibc/core/channel/v1/tx.proto +++ b/proto/ibc/core/channel/v1/tx.proto @@ -79,7 +79,7 @@ message MsgChannelOpenTry { option (gogoproto.goproto_getters) = false; string port_id = 1 [(gogoproto.moretags) = "yaml:\"port_id\""]; - // Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC. + // Deprecated: this field is unused. Crossing hello's are no longer supported in core IBC. string previous_channel_id = 2 [deprecated = true, (gogoproto.moretags) = "yaml:\"previous_channel_id\""]; // NOTE: the version field within the channel has been deprecated. Its value will be ignored by core IBC. Channel channel = 3 [(gogoproto.nullable) = false]; From 9856d241be7102c87cd100b0e22d4da20961a08b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 7 Jul 2022 12:41:57 +0200 Subject: [PATCH 12/16] update documentation --- docs/ibc/apps.md | 12 +++--------- modules/apps/transfer/ibc_module.go | 1 + 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/docs/ibc/apps.md b/docs/ibc/apps.md index 267a2e5ca55..11fa1e84b7e 100644 --- a/docs/ibc/apps.md +++ b/docs/ibc/apps.md @@ -73,15 +73,9 @@ OnChanOpenTry( counterparty channeltypes.Counterparty, counterpartyVersion string, ) (string, error) { - // Module may have already claimed capability in OnChanOpenInit in the case of crossing hellos - // (ie chainA and chainB both call ChanOpenInit before one of them calls ChanOpenTry) - // If the module can already authenticate the capability then the module already owns it so we don't need to claim - // Otherwise, module does not have channel capability and we must claim it from IBC - if !k.AuthenticateCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) { - // Only claim channel capability passed back by IBC module if we do not already own it - if err := k.scopedKeeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return err - } + // OpenTry must claim the channelCapability that IBC passes into the callback + if err := k.scopedKeeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { + return err } // ... do custom initialization logic diff --git a/modules/apps/transfer/ibc_module.go b/modules/apps/transfer/ibc_module.go index d2b78001e99..6472c2998b0 100644 --- a/modules/apps/transfer/ibc_module.go +++ b/modules/apps/transfer/ibc_module.go @@ -111,6 +111,7 @@ func (im IBCModule) OnChanOpenTry( return "", sdkerrors.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: got: %s, expected %s", counterpartyVersion, types.Version) } + // OpenTry must claim the channelCapability that IBC passes into the callback if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { return "", err } From a75219d3b4d92552c0a915a99452b594a718e66e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 7 Jul 2022 12:46:47 +0200 Subject: [PATCH 13/16] add migration documentation --- docs/migrations/v3-to-v4.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/migrations/v3-to-v4.md b/docs/migrations/v3-to-v4.md index 903c027ce4b..4fffedc9399 100644 --- a/docs/migrations/v3-to-v4.md +++ b/docs/migrations/v3-to-v4.md @@ -18,6 +18,10 @@ No genesis or in-place migrations required when upgrading from v1 or v2 of ibc-g ## Chains +- No relevant changes were made in this release. + +## IBC Apps + ### ICS04 - Channel The `WriteAcknowledgement` API now takes the `exported.Acknowledgement` type instead of passing in the acknowledgement byte array directly. @@ -30,6 +34,10 @@ The `NewErrorAcknowledgement` method signature has changed. It now accepts an `error` rather than a `string`. This was done in order to prevent accidental state changes. All error acknowledgements now contain a deterministic ABCI code and error message. It is the responsibility of the application developer to emit error details in events. +Crossing hellos have been removed from 04-channel handshake negotiation. +IBC Applications no longer need to account from already claimed capabilities in the `OnChanOpenTry` callback. The capability provided by core IBC must be able to be claimed with error. +`PreviousChannelId` in `MsgChannelOpenTry` has been deprecated and is no longer used by core IBC. + ### ICS27 - Interchain Accounts The `RegisterInterchainAccount` API has been modified to include an additional `version` argument. This change has been made in order to support ICS29 fee middleware, for relayer incentivization of ICS27 packets. @@ -91,3 +99,5 @@ if err := k.icaControllerKeeper.RegisterInterchainAccount(ctx, msg.ConnectionId, ## Relayers When using the `DenomTrace` gRPC, the full IBC denomination with the `ibc/` prefix may now be passed in. + +Crossing hello's are no longer supported by core IBC. The handshake should be completed in the logical 4 step process (INIT, TRY, ACK, CONFIRM). From dbb9b0e46a56c548d65f2feac5bba79ec656df69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 7 Jul 2022 13:26:22 +0200 Subject: [PATCH 14/16] remove unnecessary doc --- .../adr-006-02-client-refactor.md | 40 ------------------- 1 file changed, 40 deletions(-) delete mode 100644 docs/architecture/adr-006-02-client-refactor.md diff --git a/docs/architecture/adr-006-02-client-refactor.md b/docs/architecture/adr-006-02-client-refactor.md deleted file mode 100644 index 55ff76544cb..00000000000 --- a/docs/architecture/adr-006-02-client-refactor.md +++ /dev/null @@ -1,40 +0,0 @@ -# ADR 006: 02-client refactor - -## Changelog -* 18 May 2022: Initial Draft - -## Status - -Accepted - -## Context - -> This section contains all the context one needs to understand the current state, and why there is a problem. It should be as succinct as possible and introduce the high level idea behind the solution. - -## Decision - -> This section explains all of the details of the proposed solution, including implementation details. -It should also describe affects / corollary items that may need to be changed as a part of this. -If the proposed change will be large, please also indicate a way to do the change to maximize ease of review. -(e.g. the optimal split of things to do between separate PR's) - -## Consequences - -> This section describes the consequences, after applying the decision. All consequences should be summarized here, not just the "positive" ones. - -### Positive - -### Negative - -### Neutral - -## References - -The primary discussion which motivated these changes was documented in issue [#284](https://github.com/cosmos/ibc-go/issues/284). - -Issues: -* {reference link} - -PRs: -* {ref} - From c890576083b419c0b229199f7ab9921416113a78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 7 Jul 2022 13:48:05 +0200 Subject: [PATCH 15/16] remove crossing hello notion from ChanOpenAck --- modules/core/04-channel/keeper/handshake.go | 7 ++----- modules/core/04-channel/keeper/handshake_test.go | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/modules/core/04-channel/keeper/handshake.go b/modules/core/04-channel/keeper/handshake.go index 579ae9a25f1..1d9cfd6382c 100644 --- a/modules/core/04-channel/keeper/handshake.go +++ b/modules/core/04-channel/keeper/handshake.go @@ -222,11 +222,8 @@ func (k Keeper) ChanOpenAck( return sdkerrors.Wrapf(types.ErrChannelNotFound, "port ID (%s) channel ID (%s)", portID, channelID) } - if !(channel.State == types.INIT || channel.State == types.TRYOPEN) { - return sdkerrors.Wrapf( - types.ErrInvalidChannelState, - "channel state should be INIT or TRYOPEN (got %s)", channel.State.String(), - ) + if channel.State != types.INIT { + return sdkerrors.Wrapf(types.ErrInvalidChannelState, "channel state should be INIT (got %s)", channel.State.String()) } if !k.scopedKeeper.AuthenticateCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)) { diff --git a/modules/core/04-channel/keeper/handshake_test.go b/modules/core/04-channel/keeper/handshake_test.go index e8750f85b05..88ca88887b4 100644 --- a/modules/core/04-channel/keeper/handshake_test.go +++ b/modules/core/04-channel/keeper/handshake_test.go @@ -322,7 +322,7 @@ func (suite *KeeperTestSuite) TestChanOpenAck() { channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) }, true}, {"channel doesn't exist", func() {}, false}, - {"channel state is not INIT or TRYOPEN", func() { + {"channel state is not INIT", func() { // create fully open channels on both chains suite.coordinator.Setup(path) channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID) From 86d61ed5b1cf8858e85c624a2d10b9108836853b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20Axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Thu, 7 Jul 2022 13:52:22 +0200 Subject: [PATCH 16/16] apply review suggestions --- CHANGELOG.md | 2 +- docs/migrations/v3-to-v4.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0de36fb4c9a..e1fdccd2092 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### API Breaking +* (modules/core/04-channel) [\#1317](https://github.com/cosmos/ibc-go/pull/1317) Remove crossing hellos from channel handshakes. The `PreviousChannelId` in `MsgChannelOpenTry` has been deprecated. * (transfer) [\#1250](https://github.com/cosmos/ibc-go/pull/1250) Deprecate `GetTransferAccount` since the `transfer` module account is never used. * (channel) [\#1283](https://github.com/cosmos/ibc-go/pull/1283) The `OnChanOpenInit` application callback now returns a version string in line with the latest [spec changes](https://github.com/cosmos/ibc/pull/629). * (modules/29-fee)[\#1338](https://github.com/cosmos/ibc-go/pull/1338) Renaming `Result` field in `IncentivizedAcknowledgement` to `AppAcknowledgement`. @@ -62,7 +63,6 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (modules/core/04-channel) [\#1232](https://github.com/cosmos/ibc-go/pull/1232) Updating params on `NewPacketId` and moving to bottom of file. * (app/29-fee) [\#1305](https://github.com/cosmos/ibc-go/pull/1305) Change version string for fee module to `ics29-1` * (app/29-fee) [\#1341](https://github.com/cosmos/ibc-go/pull/1341) Check if the fee module is locked and if the fee module is enabled before refunding all fees -* (modules/core/04-channel) [\#1317](https://github.com/cosmos/ibc-go/pull/1317) Remove corssing hellos from channel handshakes. The `PreviousChannelId` in `MsgChannelOpenTry` has been deprecated. * (transfer) [\#1414](https://github.com/cosmos/ibc-go/pull/1414) Emitting Sender address from `fungible_token_packet` events in `OnRecvPacket` and `OnAcknowledgementPacket`. * (testing/simapp) [\#1397](https://github.com/cosmos/ibc-go/pull/1397) Adding mock module to maccperms and adding check to ensure mock module is not a blocked account address. * (core/02-client) [\#1570](https://github.com/cosmos/ibc-go/pull/1570) Emitting an event when handling an upgrade client proposal. diff --git a/docs/migrations/v3-to-v4.md b/docs/migrations/v3-to-v4.md index 4fffedc9399..9d6a1fb3f31 100644 --- a/docs/migrations/v3-to-v4.md +++ b/docs/migrations/v3-to-v4.md @@ -100,4 +100,4 @@ if err := k.icaControllerKeeper.RegisterInterchainAccount(ctx, msg.ConnectionId, When using the `DenomTrace` gRPC, the full IBC denomination with the `ibc/` prefix may now be passed in. -Crossing hello's are no longer supported by core IBC. The handshake should be completed in the logical 4 step process (INIT, TRY, ACK, CONFIRM). +Crossing hellos are no longer supported by core IBC. The handshake should be completed in the logical 4 step process (INIT, TRY, ACK, CONFIRM).