From a28a5497d74fa112ed96c567dc11eb15081a1a5d Mon Sep 17 00:00:00 2001 From: DimitrisJim Date: Thu, 20 Jun 2024 10:38:07 +0300 Subject: [PATCH] chore(transfer): emit forwarding information in events. (#6647) * chore(transfer): emit forwarding information in events. * nit: rename as per Carlos's suggestion --- modules/apps/transfer/ibc_module_test.go | 17 +++++++++++ .../apps/transfer/internal/events/events.go | 30 ++++++++++++------- .../apps/transfer/keeper/msg_server_test.go | 8 +++-- modules/apps/transfer/keeper/relay.go | 2 +- modules/apps/transfer/types/events.go | 1 + 5 files changed, 44 insertions(+), 14 deletions(-) diff --git a/modules/apps/transfer/ibc_module_test.go b/modules/apps/transfer/ibc_module_test.go index 171f6d8108f..0b30c6718e6 100644 --- a/modules/apps/transfer/ibc_module_test.go +++ b/modules/apps/transfer/ibc_module_test.go @@ -306,6 +306,15 @@ func (suite *TransferTestSuite) TestOnRecvPacket() { types.NewForwarding("", types.Hop{PortId: "transfer", ChannelId: "channel-0"}), ) packet.Data = packetData.GetBytes() + + forwardingBz, err := json.Marshal(packetData.Forwarding) + suite.Require().NoError(err) + for i, attr := range expectedAttributes { + if attr.Key == types.AttributeKeyForwarding { + expectedAttributes[i].Value = string(forwardingBz) + break + } + } }, nil, "", @@ -316,11 +325,15 @@ func (suite *TransferTestSuite) TestOnRecvPacket() { packet.Data = []byte("invalid data") // Override expected attributes because this fails on unmarshaling packet data (so can't get the attributes) + forwardingBz, err := json.Marshal(types.Forwarding{}) + suite.Require().NoError(err) + expectedAttributes = []sdk.Attribute{ sdk.NewAttribute(types.AttributeKeySender, ""), sdk.NewAttribute(types.AttributeKeyReceiver, ""), sdk.NewAttribute(types.AttributeKeyTokens, "null"), sdk.NewAttribute(types.AttributeKeyMemo, ""), + sdk.NewAttribute(types.AttributeKeyForwarding, string(forwardingBz)), sdk.NewAttribute(types.AttributeKeyAckSuccess, "false"), sdk.NewAttribute(types.AttributeKeyAckError, "cannot unmarshal ICS20-V2 transfer packet data: invalid character 'i' looking for beginning of value: invalid type: invalid type"), } @@ -360,11 +373,15 @@ func (suite *TransferTestSuite) TestOnRecvPacket() { tokensBz, err := json.Marshal(packetData.Tokens) suite.Require().NoError(err) + forwardingBz, err := json.Marshal(packetData.Forwarding) + suite.Require().NoError(err) + expectedAttributes = []sdk.Attribute{ sdk.NewAttribute(types.AttributeKeySender, packetData.Sender), sdk.NewAttribute(types.AttributeKeyReceiver, packetData.Receiver), sdk.NewAttribute(types.AttributeKeyTokens, string(tokensBz)), sdk.NewAttribute(types.AttributeKeyMemo, packetData.Memo), + sdk.NewAttribute(types.AttributeKeyForwarding, string(forwardingBz)), } if tc.expAck == nil || tc.expAck.Success() { expectedAttributes = append(expectedAttributes, sdk.NewAttribute(types.AttributeKeyAckSuccess, "true")) diff --git a/modules/apps/transfer/internal/events/events.go b/modules/apps/transfer/internal/events/events.go index 47ef145b0fb..6a1646e4ce7 100644 --- a/modules/apps/transfer/internal/events/events.go +++ b/modules/apps/transfer/internal/events/events.go @@ -11,16 +11,18 @@ import ( ) // EmitTransferEvent emits a ibc transfer event on successful transfers. -func EmitTransferEvent(ctx sdk.Context, sender, receiver string, tokens types.Tokens, memo string) { - jsonTokens := mustMarshalType[types.Tokens](tokens) +func EmitTransferEvent(ctx sdk.Context, sender, receiver string, tokens types.Tokens, memo string, forwarding types.Forwarding) { + tokensStr := mustMarshalType[types.Tokens](tokens) + forwardingStr := mustMarshalType[types.Forwarding](forwarding) ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeTransfer, sdk.NewAttribute(types.AttributeKeySender, sender), sdk.NewAttribute(types.AttributeKeyReceiver, receiver), - sdk.NewAttribute(types.AttributeKeyTokens, jsonTokens), + sdk.NewAttribute(types.AttributeKeyTokens, tokensStr), sdk.NewAttribute(types.AttributeKeyMemo, memo), + sdk.NewAttribute(types.AttributeKeyForwarding, forwardingStr), ), sdk.NewEvent( sdk.EventTypeMessage, @@ -31,13 +33,15 @@ func EmitTransferEvent(ctx sdk.Context, sender, receiver string, tokens types.To // EmitOnRecvPacketEvent emits a fungible token packet event in the OnRecvPacket callback func EmitOnRecvPacketEvent(ctx sdk.Context, packetData types.FungibleTokenPacketDataV2, ack channeltypes.Acknowledgement, ackErr error) { - jsonTokens := mustMarshalType[types.Tokens](packetData.Tokens) + tokensStr := mustMarshalType[types.Tokens](packetData.Tokens) + forwardingStr := mustMarshalType[types.Forwarding](packetData.Forwarding) eventAttributes := []sdk.Attribute{ sdk.NewAttribute(types.AttributeKeySender, packetData.Sender), sdk.NewAttribute(types.AttributeKeyReceiver, packetData.Receiver), - sdk.NewAttribute(types.AttributeKeyTokens, jsonTokens), + sdk.NewAttribute(types.AttributeKeyTokens, tokensStr), sdk.NewAttribute(types.AttributeKeyMemo, packetData.Memo), + sdk.NewAttribute(types.AttributeKeyForwarding, forwardingStr), sdk.NewAttribute(types.AttributeKeyAckSuccess, strconv.FormatBool(ack.Success())), } @@ -59,15 +63,17 @@ func EmitOnRecvPacketEvent(ctx sdk.Context, packetData types.FungibleTokenPacket // EmitOnAcknowledgementPacketEvent emits a fungible token packet event in the OnAcknowledgementPacket callback func EmitOnAcknowledgementPacketEvent(ctx sdk.Context, packetData types.FungibleTokenPacketDataV2, ack channeltypes.Acknowledgement) { - jsonTokens := mustMarshalType[types.Tokens](types.Tokens(packetData.Tokens)) + tokensStr := mustMarshalType[types.Tokens](packetData.Tokens) + forwardingStr := mustMarshalType[types.Forwarding](packetData.Forwarding) ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypePacket, sdk.NewAttribute(sdk.AttributeKeySender, packetData.Sender), sdk.NewAttribute(types.AttributeKeyReceiver, packetData.Receiver), - sdk.NewAttribute(types.AttributeKeyTokens, jsonTokens), + sdk.NewAttribute(types.AttributeKeyTokens, tokensStr), sdk.NewAttribute(types.AttributeKeyMemo, packetData.Memo), + sdk.NewAttribute(types.AttributeKeyForwarding, forwardingStr), sdk.NewAttribute(types.AttributeKeyAck, ack.String()), ), sdk.NewEvent( @@ -96,14 +102,16 @@ func EmitOnAcknowledgementPacketEvent(ctx sdk.Context, packetData types.Fungible // EmitOnTimeoutPacketEvent emits a fungible token packet event in the OnTimeoutPacket callback func EmitOnTimeoutEvent(ctx sdk.Context, packetData types.FungibleTokenPacketDataV2) { - jsonTokens := mustMarshalType[types.Tokens](types.Tokens(packetData.Tokens)) + tokensStr := mustMarshalType[types.Tokens](packetData.Tokens) + forwardingStr := mustMarshalType[types.Forwarding](packetData.Forwarding) ctx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeTimeout, sdk.NewAttribute(types.AttributeKeyReceiver, packetData.Sender), - sdk.NewAttribute(types.AttributeKeyRefundTokens, jsonTokens), + sdk.NewAttribute(types.AttributeKeyRefundTokens, tokensStr), sdk.NewAttribute(types.AttributeKeyMemo, packetData.Memo), + sdk.NewAttribute(types.AttributeKeyForwarding, forwardingStr), ), sdk.NewEvent( sdk.EventTypeMessage, @@ -114,13 +122,13 @@ func EmitOnTimeoutEvent(ctx sdk.Context, packetData types.FungibleTokenPacketDat // EmitDenomEvent emits a denomination event in the OnRecv callback. func EmitDenomEvent(ctx sdk.Context, token types.Token) { - jsonDenom := mustMarshalType[types.Denom](token.Denom) + denomStr := mustMarshalType[types.Denom](token.Denom) ctx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeDenom, sdk.NewAttribute(types.AttributeKeyDenomHash, token.Denom.Hash().String()), - sdk.NewAttribute(types.AttributeKeyDenom, jsonDenom), + sdk.NewAttribute(types.AttributeKeyDenom, denomStr), ), ) } diff --git a/modules/apps/transfer/keeper/msg_server_test.go b/modules/apps/transfer/keeper/msg_server_test.go index 1ce9458fdb1..2a9be02aed7 100644 --- a/modules/apps/transfer/keeper/msg_server_test.go +++ b/modules/apps/transfer/keeper/msg_server_test.go @@ -149,7 +149,10 @@ func (suite *KeeperTestSuite) TestMsgTransfer() { tokens = append(tokens, token) } - jsonTokens, err := json.Marshal(types.Tokens(tokens)) + tokensBz, err := json.Marshal(types.Tokens(tokens)) + suite.Require().NoError(err) + + forwardingBz, err := json.Marshal(msg.Forwarding) suite.Require().NoError(err) res, err := suite.chainA.GetSimApp().TransferKeeper.Transfer(ctx, msg) @@ -162,8 +165,9 @@ func (suite *KeeperTestSuite) TestMsgTransfer() { sdk.NewEvent(types.EventTypeTransfer, sdk.NewAttribute(types.AttributeKeySender, msg.Sender), sdk.NewAttribute(types.AttributeKeyReceiver, msg.Receiver), - sdk.NewAttribute(types.AttributeKeyTokens, string(jsonTokens)), + sdk.NewAttribute(types.AttributeKeyTokens, string(tokensBz)), sdk.NewAttribute(types.AttributeKeyMemo, msg.Memo), + sdk.NewAttribute(types.AttributeKeyForwarding, string(forwardingBz)), ), sdk.NewEvent( sdk.EventTypeMessage, diff --git a/modules/apps/transfer/keeper/relay.go b/modules/apps/transfer/keeper/relay.go index 2bfedcc0493..5b555eae9c6 100644 --- a/modules/apps/transfer/keeper/relay.go +++ b/modules/apps/transfer/keeper/relay.go @@ -147,7 +147,7 @@ func (k Keeper) sendTransfer( return 0, err } - events.EmitTransferEvent(ctx, sender.String(), receiver, tokens, memo) + events.EmitTransferEvent(ctx, sender.String(), receiver, tokens, memo, forwarding) defer internaltelemetry.ReportTransferTelemetry(tokens, labels) diff --git a/modules/apps/transfer/types/events.go b/modules/apps/transfer/types/events.go index d982298c12b..90f2137d11f 100644 --- a/modules/apps/transfer/types/events.go +++ b/modules/apps/transfer/types/events.go @@ -19,4 +19,5 @@ const ( AttributeKeyAck = "acknowledgement" AttributeKeyAckError = "error" AttributeKeyMemo = "memo" + AttributeKeyForwarding = "forwarding" )