From 41bc9fb8e61db6e37357830411f1d2256dd8cb5d Mon Sep 17 00:00:00 2001 From: Aditya Date: Thu, 27 Aug 2020 15:01:12 -0400 Subject: [PATCH] Fix setting NextSequenceAck (#7181) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Fix setting NextSequenceAck * Update x/ibc/04-channel/keeper/packet_test.go Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> Co-authored-by: Federico Kunze <31522760+fedekunze@users.noreply.github.com> Co-authored-by: colin axnér <25233464+colin-axner@users.noreply.github.com> --- x/ibc/04-channel/keeper/packet.go | 6 +++++- x/ibc/04-channel/keeper/packet_test.go | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/x/ibc/04-channel/keeper/packet.go b/x/ibc/04-channel/keeper/packet.go index 0e4779f92..53e1a9c69 100644 --- a/x/ibc/04-channel/keeper/packet.go +++ b/x/ibc/04-channel/keeper/packet.go @@ -299,6 +299,8 @@ func (k Keeper) PacketExecuted( nextSequenceRecv++ + // incrementng nextSequenceRecv and storing under this chain's channelEnd identifiers + // Since this is the receiving chain, our channelEnd is packet's destination port and channel k.SetNextSequenceRecv(ctx, packet.GetDestPort(), packet.GetDestChannel(), nextSequenceRecv) } @@ -462,7 +464,9 @@ func (k Keeper) AcknowledgementExecuted( nextSequenceAck++ - k.SetNextSequenceAck(ctx, packet.GetDestPort(), packet.GetDestChannel(), nextSequenceAck) + // incrementng NextSequenceAck and storing under this chain's channelEnd identifiers + // Since this is the original sending chain, our channelEnd is packet's source port and channel + k.SetNextSequenceAck(ctx, packet.GetSourcePort(), packet.GetSourceChannel(), nextSequenceAck) } // log that a packet has been acknowledged diff --git a/x/ibc/04-channel/keeper/packet_test.go b/x/ibc/04-channel/keeper/packet_test.go index ec9dbca18..4e7128514 100644 --- a/x/ibc/04-channel/keeper/packet_test.go +++ b/x/ibc/04-channel/keeper/packet_test.go @@ -607,6 +607,23 @@ func (suite *KeeperTestSuite) TestAcknowledgementExecuted() { testCases := []testCase{ {"success ORDERED", func() { + clientA, clientB, connA, connB := suite.coordinator.SetupClientConnections(suite.chainA, suite.chainB, clientexported.Tendermint) + channelA, channelB := suite.coordinator.CreateTransferChannels(suite.chainA, suite.chainB, connA, connB, types.ORDERED) + + packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) + + // create packet commitment + err := suite.coordinator.SendPacket(suite.chainA, suite.chainB, packet, clientB) + suite.Require().NoError(err) + + // create packet acknowledgement + err = suite.coordinator.PacketExecuted(suite.chainB, suite.chainA, packet, clientA) + suite.Require().NoError(err) + + chanCap = suite.chainA.GetChannelCapability(channelA.PortID, channelA.ID) + + }, true}, + {"success UNORDERED", func() { // setup uses an UNORDERED channel clientA, clientB, _, _, channelA, channelB := suite.coordinator.Setup(suite.chainA, suite.chainB) packet = types.NewPacket(validPacketData, 1, channelA.PortID, channelA.ID, channelB.PortID, channelB.ID, timeoutHeight, disabledTimeoutTimestamp) @@ -644,9 +661,18 @@ func (suite *KeeperTestSuite) TestAcknowledgementExecuted() { err := suite.chainA.App.IBCKeeper.ChannelKeeper.AcknowledgementExecuted(suite.chainA.GetContext(), chanCap, packet) pc := suite.chainA.App.IBCKeeper.ChannelKeeper.GetPacketCommitment(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel(), packet.GetSequence()) + channelA, _ := suite.chainA.App.IBCKeeper.ChannelKeeper.GetChannel(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel()) + sequenceAck, _ := suite.chainA.App.IBCKeeper.ChannelKeeper.GetNextSequenceAck(suite.chainA.GetContext(), packet.GetSourcePort(), packet.GetSourceChannel()) + if tc.expPass { suite.NoError(err) suite.Nil(pc) + + if channelA.Ordering == types.ORDERED { + suite.Require().Equal(packet.GetSequence()+1, sequenceAck, "sequence not incremented in ordered channel") + } else { + suite.Require().Equal(uint64(1), sequenceAck, "sequence incremented for UNORDERED channel") + } } else { suite.Error(err) }