Skip to content

Commit 17b2240

Browse files
Merge commit from fork
lint test file remove test case Co-authored-by: Aditya Sripal <14364734+AdityaSripal@users.noreply.github.com>
1 parent 59987d5 commit 17b2240

File tree

2 files changed

+74
-4
lines changed

2 files changed

+74
-4
lines changed

modules/core/04-channel/keeper/packet.go

+9
Original file line numberDiff line numberDiff line change
@@ -430,6 +430,15 @@ func (k Keeper) AcknowledgePacket(
430430

431431
packetCommitment := types.CommitPacket(k.cdc, packet)
432432

433+
var ack types.Acknowledgement
434+
err := types.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack)
435+
if err == nil {
436+
ackBz := ack.Acknowledgement()
437+
if !bytes.Equal(ackBz, acknowledgement) {
438+
return errorsmod.Wrap(types.ErrInvalidAcknowledgement, "acknowledgement marshalling error")
439+
}
440+
}
441+
433442
// verify we sent the packet and haven't cleared it out yet
434443
if !bytes.Equal(commitment, packetCommitment) {
435444
return errorsmod.Wrapf(types.ErrInvalidPacket, "commitment bytes are not equal: got (%v), expected (%v)", packetCommitment, commitment)

modules/core/04-channel/keeper/packet_test.go

+65-4
Original file line numberDiff line numberDiff line change
@@ -825,7 +825,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
825825
var (
826826
path *ibctesting.Path
827827
packet types.Packet
828-
ack = ibcmock.MockAcknowledgement
828+
ack []byte
829829

830830
channelCap *capabilitytypes.Capability
831831
)
@@ -1043,7 +1043,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
10431043

10441044
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
10451045

1046-
err = path.EndpointA.AcknowledgePacket(packet, ack.Acknowledgement())
1046+
err = path.EndpointA.AcknowledgePacket(packet, ack)
10471047
suite.Require().NoError(err)
10481048
},
10491049
expResult: func(commitment []byte, err error) {
@@ -1069,7 +1069,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
10691069

10701070
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
10711071

1072-
err = path.EndpointA.AcknowledgePacket(packet, ack.Acknowledgement())
1072+
err = path.EndpointA.AcknowledgePacket(packet, ack)
10731073
suite.Require().NoError(err)
10741074
},
10751075
expResult: func(commitment []byte, err error) {
@@ -1078,6 +1078,65 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
10781078
suite.Require().Nil(commitment)
10791079
},
10801080
},
1081+
{
1082+
name: "fake acknowledgement",
1083+
malleate: func() {
1084+
// setup uses an UNORDERED channel
1085+
suite.coordinator.Setup(path)
1086+
1087+
// create packet commitment
1088+
sequence, err := path.EndpointA.SendPacket(defaultTimeoutHeight, disabledTimeoutTimestamp, ibctesting.MockPacketData)
1089+
suite.Require().NoError(err)
1090+
1091+
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
1092+
1093+
// write packet acknowledgement directly
1094+
// Create a valid acknowledgement using deterministic serialization.
1095+
ack = types.NewResultAcknowledgement([]byte{byte(1)}).Acknowledgement()
1096+
// Introduce non-determinism: insert an extra space after the first character '{'
1097+
// This will deserialize correctly but fail to re-serialize to the expected bytes.
1098+
if len(ack) > 0 && ack[0] == '{' {
1099+
ack = []byte("{ " + string(ack[1:]))
1100+
}
1101+
path.EndpointB.Chain.Coordinator.UpdateTimeForChain(path.EndpointB.Chain)
1102+
1103+
path.EndpointB.Chain.App.GetIBCKeeper().ChannelKeeper.SetPacketAcknowledgement(path.EndpointB.Chain.GetContext(), path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, sequence, types.CommitAcknowledgement(ack))
1104+
1105+
path.EndpointB.Chain.NextBlock()
1106+
path.EndpointA.UpdateClient()
1107+
},
1108+
expResult: func(commitment []byte, err error) {
1109+
suite.Require().Error(err)
1110+
suite.Require().ErrorIs(err, types.ErrInvalidAcknowledgement)
1111+
suite.Require().NotNil(commitment)
1112+
},
1113+
},
1114+
{
1115+
name: "non-standard acknowledgement",
1116+
malleate: func() {
1117+
// setup uses an UNORDERED channel
1118+
suite.coordinator.Setup(path)
1119+
1120+
// create packet commitment
1121+
sequence, err := path.EndpointA.SendPacket(defaultTimeoutHeight, disabledTimeoutTimestamp, ibctesting.MockPacketData)
1122+
suite.Require().NoError(err)
1123+
1124+
channelCap = suite.chainA.GetChannelCapability(path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID)
1125+
1126+
// write packet acknowledgement directly
1127+
ack = []byte(`{"somethingelse":"anything"}`)
1128+
path.EndpointB.Chain.Coordinator.UpdateTimeForChain(path.EndpointB.Chain)
1129+
1130+
path.EndpointB.Chain.App.GetIBCKeeper().ChannelKeeper.SetPacketAcknowledgement(path.EndpointB.Chain.GetContext(), path.EndpointB.ChannelConfig.PortID, path.EndpointB.ChannelID, sequence, types.CommitAcknowledgement(ack))
1131+
1132+
path.EndpointB.Chain.NextBlock()
1133+
path.EndpointA.UpdateClient()
1134+
},
1135+
expResult: func(commitment []byte, err error) {
1136+
suite.Require().NoError(err)
1137+
suite.Require().Nil(commitment)
1138+
},
1139+
},
10811140
{
10821141
name: "channel not found",
10831142
malleate: func() {
@@ -1371,6 +1430,8 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
13711430
tc := tc
13721431
suite.Run(tc.name, func() {
13731432
suite.SetupTest() // reset
1433+
// reset ack
1434+
ack = ibcmock.MockAcknowledgement.Acknowledgement()
13741435

13751436
path = ibctesting.NewPath(suite.chainA, suite.chainB)
13761437
ctx := suite.chainA.GetContext()
@@ -1380,7 +1441,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
13801441
packetKey := host.PacketAcknowledgementKey(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence())
13811442
proof, proofHeight := path.EndpointB.QueryProof(packetKey)
13821443

1383-
err := suite.chainA.App.GetIBCKeeper().ChannelKeeper.AcknowledgePacket(ctx, channelCap, packet, ack.Acknowledgement(), proof, proofHeight)
1444+
err := suite.chainA.App.GetIBCKeeper().ChannelKeeper.AcknowledgePacket(ctx, channelCap, packet, ack, proof, proofHeight)
13841445

13851446
commitment := suite.chainA.App.GetIBCKeeper().ChannelKeeper.GetPacketCommitment(ctx, path.EndpointA.ChannelConfig.PortID, path.EndpointA.ChannelID, packet.GetSequence())
13861447
tc.expResult(commitment, err)

0 commit comments

Comments
 (0)