diff --git a/modules/apps/transfer/ibc_module.go b/modules/apps/transfer/ibc_module.go index f8cdb530af2..2aa27da7f62 100644 --- a/modules/apps/transfer/ibc_module.go +++ b/modules/apps/transfer/ibc_module.go @@ -223,11 +223,12 @@ func (im IBCModule) OnAcknowledgementPacket( if err := im.keeper.OnAcknowledgementPacket(ctx, packet, data, ack); err != nil { return err } - + denom := types.ParseDenomTrace(data.Denom) // AfterTransferEnd if ack.Success() { - denom := types.ParseDenomTrace(data.Denom) im.keeper.AfterTransferEnd(ctx, data, denom.BaseDenom) + } else { + im.keeper.AfterTransferFail(ctx, data, denom.BaseDenom) } ctx.EventManager().EmitEvent( @@ -276,6 +277,9 @@ func (im IBCModule) OnTimeoutPacket( if err := im.keeper.OnTimeoutPacket(ctx, packet, data); err != nil { return err } + + denom := types.ParseDenomTrace(data.Denom) + im.keeper.AfterTransferFail(ctx, data, denom.BaseDenom) ctx.EventManager().EmitEvent( sdk.NewEvent( diff --git a/modules/apps/transfer/keeper/hooks.go b/modules/apps/transfer/keeper/hooks.go index 3900c1206f8..566db6aada5 100644 --- a/modules/apps/transfer/keeper/hooks.go +++ b/modules/apps/transfer/keeper/hooks.go @@ -10,6 +10,10 @@ func (k Keeper) AfterTransferEnd(ctx sdk.Context, packet types.FungibleTokenPack k.hooks.AfterTransferEnd(ctx, packet, base_denom) } +func (k Keeper) AfterTransferFail(ctx sdk.Context, packet types.FungibleTokenPacketData, base_denom string) { + k.hooks.AfterTransferFail(ctx, packet, base_denom) +} + // AfterOnRecvPacket executes the indicated hook after OnRecvPacket ends func (k Keeper) AfterOnRecvPacket(ctx sdk.Context, packet types.FungibleTokenPacketData) { k.hooks.AfterOnRecvPacket(ctx, packet) diff --git a/modules/apps/transfer/types/hooks.go b/modules/apps/transfer/types/hooks.go index f1e7cbfbf3e..974d751cc5e 100644 --- a/modules/apps/transfer/types/hooks.go +++ b/modules/apps/transfer/types/hooks.go @@ -6,6 +6,7 @@ import ( type TransferHooks interface { AfterTransferEnd(ctx sdk.Context, data FungibleTokenPacketData, base_denom string) + AfterTransferFail(ctx sdk.Context, data FungibleTokenPacketData, base_denom string) AfterOnRecvPacket(ctx sdk.Context, data FungibleTokenPacketData) } @@ -23,6 +24,12 @@ func (h MultiTransferHooks) AfterTransferEnd(ctx sdk.Context, data FungibleToken } } +func (h MultiTransferHooks) AfterTransferFail(ctx sdk.Context, data FungibleTokenPacketData, base_denom string) { + for i := range h { + h[i].AfterTransferFail(ctx, data, base_denom) + } +} + func (h MultiTransferHooks) AfterOnRecvPacket(ctx sdk.Context, data FungibleTokenPacketData) { for i := range h { h[i].AfterOnRecvPacket(ctx, data)