Skip to content

Commit

Permalink
chore(transfer): emit forwarding information in events. (#6647)
Browse files Browse the repository at this point in the history
* chore(transfer): emit forwarding information in events.

* nit: rename as per Carlos's suggestion
  • Loading branch information
DimitrisJim authored Jun 20, 2024
1 parent 14d5486 commit a28a549
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 14 deletions.
17 changes: 17 additions & 0 deletions modules/apps/transfer/ibc_module_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
"",
Expand All @@ -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"),
}
Expand Down Expand Up @@ -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"))
Expand Down
30 changes: 19 additions & 11 deletions modules/apps/transfer/internal/events/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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())),
}

Expand All @@ -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(
Expand Down Expand Up @@ -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,
Expand All @@ -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),
),
)
}
Expand Down
8 changes: 6 additions & 2 deletions modules/apps/transfer/keeper/msg_server_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion modules/apps/transfer/keeper/relay.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
1 change: 1 addition & 0 deletions modules/apps/transfer/types/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,4 +19,5 @@ const (
AttributeKeyAck = "acknowledgement"
AttributeKeyAckError = "error"
AttributeKeyMemo = "memo"
AttributeKeyForwarding = "forwarding"
)

0 comments on commit a28a549

Please sign in to comment.