Skip to content

Commit 0e72d08

Browse files
authored
refactor: use event service in transfer mod (#7725)
* refactor: use event service in transfer mod * chore: make lint-fix diffs
1 parent 4123036 commit 0e72d08

File tree

6 files changed

+160
-162
lines changed

6 files changed

+160
-162
lines changed

modules/apps/transfer/ibc_module.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111

1212
sdk "github.com/cosmos/cosmos-sdk/types"
1313

14-
"github.com/cosmos/ibc-go/v9/modules/apps/transfer/internal/events"
1514
"github.com/cosmos/ibc-go/v9/modules/apps/transfer/keeper"
1615
"github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"
1716
channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"
@@ -181,7 +180,9 @@ func (im IBCModule) OnRecvPacket(
181180
// we are explicitly wrapping this emit event call in an anonymous function so that
182181
// the packet data is evaluated after it has been assigned a value.
183182
defer func() {
184-
events.EmitOnRecvPacketEvent(ctx, data, ack, ackErr)
183+
if err := im.keeper.EmitOnRecvPacketEvent(ctx, data, ack, ackErr); err != nil {
184+
ack = channeltypes.NewErrorAcknowledgement(err)
185+
}
185186
}()
186187

187188
data, ackErr = types.UnmarshalPacketData(packet.GetData(), channelVersion)
@@ -230,9 +231,7 @@ func (im IBCModule) OnAcknowledgementPacket(
230231
return err
231232
}
232233

233-
events.EmitOnAcknowledgementPacketEvent(ctx, data, ack)
234-
235-
return nil
234+
return im.keeper.EmitOnAcknowledgementPacketEvent(ctx, data, ack)
236235
}
237236

238237
// OnTimeoutPacket implements the IBCModule interface
@@ -252,8 +251,7 @@ func (im IBCModule) OnTimeoutPacket(
252251
return err
253252
}
254253

255-
events.EmitOnTimeoutEvent(ctx, data)
256-
return nil
254+
return im.keeper.EmitOnTimeoutEvent(ctx, data)
257255
}
258256

259257
// OnChanUpgradeInit implements the IBCModule interface

modules/apps/transfer/internal/events/events.go

Lines changed: 0 additions & 150 deletions
This file was deleted.
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
1+
package keeper
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"strconv"
7+
8+
"cosmossdk.io/core/event"
9+
10+
sdk "github.com/cosmos/cosmos-sdk/types"
11+
12+
"github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"
13+
channeltypes "github.com/cosmos/ibc-go/v9/modules/core/04-channel/types"
14+
)
15+
16+
// EmitTransferEvent emits a ibc transfer event on successful transfers.
17+
func (k Keeper) EmitTransferEvent(ctx context.Context, sender, receiver string, tokens types.Tokens, memo string, forwardingHops []types.Hop) error {
18+
tokensStr := mustMarshalJSON(tokens)
19+
forwardingHopsStr := mustMarshalJSON(forwardingHops)
20+
21+
if err := k.EventService.EventManager(ctx).EmitKV(
22+
types.EventTypeTransfer,
23+
event.NewAttribute(types.AttributeKeySender, sender),
24+
event.NewAttribute(types.AttributeKeyReceiver, receiver),
25+
event.NewAttribute(types.AttributeKeyTokens, tokensStr),
26+
event.NewAttribute(types.AttributeKeyMemo, memo),
27+
event.NewAttribute(types.AttributeKeyForwardingHops, forwardingHopsStr),
28+
); err != nil {
29+
return err
30+
}
31+
32+
return k.EventService.EventManager(ctx).EmitKV(
33+
sdk.EventTypeMessage,
34+
event.NewAttribute(sdk.AttributeKeyModule, types.ModuleName),
35+
)
36+
}
37+
38+
// EmitOnRecvPacketEvent emits a fungible token packet event in the OnRecvPacket callback
39+
func (k Keeper) EmitOnRecvPacketEvent(ctx context.Context, packetData types.FungibleTokenPacketDataV2, ack channeltypes.Acknowledgement, ackErr error) error {
40+
tokensStr := mustMarshalJSON(packetData.Tokens)
41+
forwardingHopStr := mustMarshalJSON(packetData.Forwarding.Hops)
42+
43+
eventAttributes := []event.Attribute{
44+
event.NewAttribute(types.AttributeKeySender, packetData.Sender),
45+
event.NewAttribute(types.AttributeKeyReceiver, packetData.Receiver),
46+
event.NewAttribute(types.AttributeKeyTokens, tokensStr),
47+
event.NewAttribute(types.AttributeKeyMemo, packetData.Memo),
48+
event.NewAttribute(types.AttributeKeyForwardingHops, forwardingHopStr),
49+
event.NewAttribute(types.AttributeKeyAckSuccess, strconv.FormatBool(ack.Success())),
50+
}
51+
52+
if ackErr != nil {
53+
eventAttributes = append(eventAttributes, event.NewAttribute(types.AttributeKeyAckError, ackErr.Error()))
54+
}
55+
56+
if err := k.EventService.EventManager(ctx).EmitKV(
57+
types.EventTypePacket,
58+
eventAttributes...,
59+
); err != nil {
60+
return err
61+
}
62+
63+
return k.EventService.EventManager(ctx).EmitKV(
64+
sdk.EventTypeMessage,
65+
event.NewAttribute(sdk.AttributeKeyModule, types.ModuleName),
66+
)
67+
}
68+
69+
// EmitOnAcknowledgementPacketEvent emits a fungible token packet event in the OnAcknowledgementPacket callback
70+
func (k Keeper) EmitOnAcknowledgementPacketEvent(ctx context.Context, packetData types.FungibleTokenPacketDataV2, ack channeltypes.Acknowledgement) error {
71+
tokensStr := mustMarshalJSON(packetData.Tokens)
72+
forwardingHopsStr := mustMarshalJSON(packetData.Forwarding.Hops)
73+
74+
if err := k.EventService.EventManager(ctx).EmitKV(
75+
types.EventTypePacket,
76+
event.NewAttribute(sdk.AttributeKeySender, packetData.Sender),
77+
event.NewAttribute(types.AttributeKeyReceiver, packetData.Receiver),
78+
event.NewAttribute(types.AttributeKeyTokens, tokensStr),
79+
event.NewAttribute(types.AttributeKeyMemo, packetData.Memo),
80+
event.NewAttribute(types.AttributeKeyForwardingHops, forwardingHopsStr),
81+
event.NewAttribute(types.AttributeKeyAck, ack.String()),
82+
); err != nil {
83+
return err
84+
}
85+
86+
switch resp := ack.Response.(type) {
87+
case *channeltypes.Acknowledgement_Result:
88+
if err := k.EventService.EventManager(ctx).EmitKV(
89+
types.EventTypePacket,
90+
event.NewAttribute(types.AttributeKeyAckSuccess, string(resp.Result)),
91+
); err != nil {
92+
return err
93+
}
94+
case *channeltypes.Acknowledgement_Error:
95+
if err := k.EventService.EventManager(ctx).EmitKV(
96+
types.EventTypePacket,
97+
event.NewAttribute(types.AttributeKeyAckError, resp.Error),
98+
); err != nil {
99+
return err
100+
}
101+
}
102+
103+
return k.EventService.EventManager(ctx).EmitKV(
104+
sdk.EventTypeMessage,
105+
event.NewAttribute(sdk.AttributeKeyModule, types.ModuleName),
106+
)
107+
}
108+
109+
// EmitOnTimeoutEvent emits a fungible token packet event in the OnTimeoutPacket callback
110+
func (k Keeper) EmitOnTimeoutEvent(ctx context.Context, packetData types.FungibleTokenPacketDataV2) error {
111+
tokensStr := mustMarshalJSON(packetData.Tokens)
112+
forwardingHopsStr := mustMarshalJSON(packetData.Forwarding.Hops)
113+
114+
if err := k.EventService.EventManager(ctx).EmitKV(
115+
types.EventTypeTimeout,
116+
event.NewAttribute(types.AttributeKeyReceiver, packetData.Sender),
117+
event.NewAttribute(types.AttributeKeyRefundTokens, tokensStr),
118+
event.NewAttribute(types.AttributeKeyMemo, packetData.Memo),
119+
event.NewAttribute(types.AttributeKeyForwardingHops, forwardingHopsStr),
120+
); err != nil {
121+
return err
122+
}
123+
124+
return k.EventService.EventManager(ctx).EmitKV(
125+
sdk.EventTypeMessage,
126+
event.NewAttribute(sdk.AttributeKeyModule, types.ModuleName),
127+
)
128+
}
129+
130+
// EmitDenomEvent emits a denomination event in the OnRecv callback.
131+
func (k Keeper) EmitDenomEvent(ctx context.Context, token types.Token) error {
132+
return k.EventService.EventManager(ctx).EmitKV(
133+
types.EventTypeDenom,
134+
event.NewAttribute(types.AttributeKeyDenomHash, token.Denom.Hash().String()),
135+
event.NewAttribute(types.AttributeKeyDenom, mustMarshalJSON(token.Denom)),
136+
)
137+
}
138+
139+
// mustMarshalJSON json marshals the given type and panics on failure.
140+
func mustMarshalJSON(v any) string {
141+
bz, err := json.Marshal(v)
142+
if err != nil {
143+
panic(err)
144+
}
145+
146+
return string(bz)
147+
}

modules/apps/transfer/keeper/relay.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010

1111
sdk "github.com/cosmos/cosmos-sdk/types"
1212

13-
"github.com/cosmos/ibc-go/v9/modules/apps/transfer/internal/events"
1413
"github.com/cosmos/ibc-go/v9/modules/apps/transfer/internal/telemetry"
1514
internaltypes "github.com/cosmos/ibc-go/v9/modules/apps/transfer/internal/types"
1615
"github.com/cosmos/ibc-go/v9/modules/apps/transfer/types"
@@ -150,7 +149,9 @@ func (k Keeper) sendTransfer(
150149
return 0, err
151150
}
152151

153-
events.EmitTransferEvent(ctx, sender.String(), receiver, tokens, memo, hops)
152+
if err := k.EmitTransferEvent(ctx, sender.String(), receiver, tokens, memo, hops); err != nil {
153+
return 0, err
154+
}
154155

155156
telemetry.ReportTransfer(sourcePort, sourceChannel, destinationPort, destinationChannel, tokens)
156157

@@ -231,7 +232,9 @@ func (k Keeper) OnRecvPacket(ctx context.Context, packet channeltypes.Packet, da
231232
k.setDenomMetadata(ctx, token.Denom)
232233
}
233234

234-
events.EmitDenomEvent(ctx, token)
235+
if err := k.EmitDenomEvent(ctx, token); err != nil {
236+
return err
237+
}
235238

236239
voucher := sdk.NewCoin(voucherDenom, transferAmount)
237240

testing/simapp/ante.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
// HandlerOptions are the options required for constructing a default SDK AnteHandler.
1515
type HandlerOptions struct {
1616
ante.HandlerOptions
17-
IBCKeeper *keeper.Keeper
17+
IBCKeeper *keeper.Keeper
1818
}
1919

2020
// NewAnteHandler returns an AnteHandler that checks and increments sequence

testing/simapp/app.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -874,7 +874,7 @@ func (app *SimApp) setAnteHandler(txConfig client.TxConfig) {
874874
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
875875
UnorderedTxManager: app.UnorderedTxManager,
876876
},
877-
IBCKeeper: app.IBCKeeper,
877+
IBCKeeper: app.IBCKeeper,
878878
},
879879
)
880880
if err != nil {

0 commit comments

Comments
 (0)