@@ -825,7 +825,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
825
825
var (
826
826
path * ibctesting.Path
827
827
packet types.Packet
828
- ack = ibcmock . MockAcknowledgement
828
+ ack [] byte
829
829
830
830
channelCap * capabilitytypes.Capability
831
831
)
@@ -1043,7 +1043,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
1043
1043
1044
1044
channelCap = suite .chainA .GetChannelCapability (path .EndpointA .ChannelConfig .PortID , path .EndpointA .ChannelID )
1045
1045
1046
- err = path .EndpointA .AcknowledgePacket (packet , ack . Acknowledgement () )
1046
+ err = path .EndpointA .AcknowledgePacket (packet , ack )
1047
1047
suite .Require ().NoError (err )
1048
1048
},
1049
1049
expResult : func (commitment []byte , err error ) {
@@ -1069,7 +1069,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
1069
1069
1070
1070
channelCap = suite .chainA .GetChannelCapability (path .EndpointA .ChannelConfig .PortID , path .EndpointA .ChannelID )
1071
1071
1072
- err = path .EndpointA .AcknowledgePacket (packet , ack . Acknowledgement () )
1072
+ err = path .EndpointA .AcknowledgePacket (packet , ack )
1073
1073
suite .Require ().NoError (err )
1074
1074
},
1075
1075
expResult : func (commitment []byte , err error ) {
@@ -1078,6 +1078,65 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
1078
1078
suite .Require ().Nil (commitment )
1079
1079
},
1080
1080
},
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
+ },
1081
1140
{
1082
1141
name : "channel not found" ,
1083
1142
malleate : func () {
@@ -1371,6 +1430,8 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
1371
1430
tc := tc
1372
1431
suite .Run (tc .name , func () {
1373
1432
suite .SetupTest () // reset
1433
+ // reset ack
1434
+ ack = ibcmock .MockAcknowledgement .Acknowledgement ()
1374
1435
1375
1436
path = ibctesting .NewPath (suite .chainA , suite .chainB )
1376
1437
ctx := suite .chainA .GetContext ()
@@ -1380,7 +1441,7 @@ func (suite *KeeperTestSuite) TestAcknowledgePacket() {
1380
1441
packetKey := host .PacketAcknowledgementKey (packet .GetDestPort (), packet .GetDestChannel (), packet .GetSequence ())
1381
1442
proof , proofHeight := path .EndpointB .QueryProof (packetKey )
1382
1443
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 )
1384
1445
1385
1446
commitment := suite .chainA .App .GetIBCKeeper ().ChannelKeeper .GetPacketCommitment (ctx , path .EndpointA .ChannelConfig .PortID , path .EndpointA .ChannelID , packet .GetSequence ())
1386
1447
tc .expResult (commitment , err )
0 commit comments