diff --git a/hooks/emitter/channel.go b/hooks/emitter/channel.go index cd6e08248..71813c3a2 100644 --- a/hooks/emitter/channel.go +++ b/hooks/emitter/channel.go @@ -92,6 +92,8 @@ func (h *Hook) handleMsgAcknowledgement(ctx sdk.Context, msg *types.MsgAcknowled "status": "failure", "reason": events[0], } + // Update balance of sender (refund) + h.AddAccountsInTx(data.Sender) } else { packet["acknowledgement"] = common.JsDict{ "status": "success", @@ -101,6 +103,27 @@ func (h *Hook) handleMsgAcknowledgement(ctx sdk.Context, msg *types.MsgAcknowled } } +func (h *Hook) handleMsgTimeout(ctx sdk.Context, msg *types.MsgTimeout) { + packet := common.JsDict{ + "src_channel": msg.Packet.SourceChannel, + "src_port": msg.Packet.SourcePort, + "sequence": msg.Packet.Sequence, + "block_time": ctx.BlockTime().UnixNano(), + } + // TODO: Handle other packet type + var data ibcxfertypes.FungibleTokenPacketData + err := ibcxfertypes.ModuleCdc.UnmarshalJSON(msg.Packet.GetData(), &data) + if err == nil { + // We use acknowledgement column to track packet status + packet["acknowledgement"] = common.JsDict{ + "status": "timeout", + } + // Update balance of sender (refund) + h.AddAccountsInTx(data.Sender) + h.Write("UPDATE_OUTGOING_PACKET", packet) + } +} + func newPacket( ctx sdk.Context, srcPort string, diff --git a/hooks/emitter/handler.go b/hooks/emitter/handler.go index c5498ac58..5565c4009 100644 --- a/hooks/emitter/handler.go +++ b/hooks/emitter/handler.go @@ -102,6 +102,8 @@ func (h *Hook) handleMsg(ctx sdk.Context, txHash []byte, msg sdk.Msg, log sdk.AB h.handleMsgChannelCloseConfirm(ctx, msg) case *channeltypes.MsgAcknowledgement: h.handleMsgAcknowledgement(ctx, msg, evMap) + case *channeltypes.MsgTimeout: + h.handleMsgTimeout(ctx, msg) case *authz.MsgGrant: h.handleMsgGrant(msg, detail) case *authz.MsgRevoke: