78 lines
2.3 KiB
Go
78 lines
2.3 KiB
Go
|
package ibc_hooks
|
||
|
|
||
|
import (
|
||
|
// external libraries
|
||
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||
|
capabilitytypes "github.com/cosmos/cosmos-sdk/x/capability/types"
|
||
|
|
||
|
// ibc-go
|
||
|
porttypes "github.com/cosmos/ibc-go/v4/modules/core/05-port/types"
|
||
|
ibcexported "github.com/cosmos/ibc-go/v4/modules/core/exported"
|
||
|
)
|
||
|
|
||
|
var _ porttypes.ICS4Wrapper = &ICS4Middleware{}
|
||
|
|
||
|
type ICS4Middleware struct {
|
||
|
channel porttypes.ICS4Wrapper
|
||
|
|
||
|
// Hooks
|
||
|
Hooks Hooks
|
||
|
}
|
||
|
|
||
|
func NewICS4Middleware(channel porttypes.ICS4Wrapper, hooks Hooks) ICS4Middleware {
|
||
|
return ICS4Middleware{
|
||
|
channel: channel,
|
||
|
Hooks: hooks,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (i ICS4Middleware) SendPacket(ctx sdk.Context, channelCap *capabilitytypes.Capability, packet ibcexported.PacketI) error {
|
||
|
if hook, ok := i.Hooks.(SendPacketOverrideHooks); ok {
|
||
|
return hook.SendPacketOverride(i, ctx, channelCap, packet)
|
||
|
}
|
||
|
|
||
|
if hook, ok := i.Hooks.(SendPacketBeforeHooks); ok {
|
||
|
hook.SendPacketBeforeHook(ctx, channelCap, packet)
|
||
|
}
|
||
|
|
||
|
err := i.channel.SendPacket(ctx, channelCap, packet)
|
||
|
|
||
|
if hook, ok := i.Hooks.(SendPacketAfterHooks); ok {
|
||
|
hook.SendPacketAfterHook(ctx, channelCap, packet, err)
|
||
|
}
|
||
|
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (i ICS4Middleware) WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, ack ibcexported.Acknowledgement) error {
|
||
|
if hook, ok := i.Hooks.(WriteAcknowledgementOverrideHooks); ok {
|
||
|
return hook.WriteAcknowledgementOverride(i, ctx, chanCap, packet, ack)
|
||
|
}
|
||
|
|
||
|
if hook, ok := i.Hooks.(WriteAcknowledgementBeforeHooks); ok {
|
||
|
hook.WriteAcknowledgementBeforeHook(ctx, chanCap, packet, ack)
|
||
|
}
|
||
|
err := i.channel.WriteAcknowledgement(ctx, chanCap, packet, ack)
|
||
|
if hook, ok := i.Hooks.(WriteAcknowledgementAfterHooks); ok {
|
||
|
hook.WriteAcknowledgementAfterHook(ctx, chanCap, packet, ack, err)
|
||
|
}
|
||
|
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
func (i ICS4Middleware) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) {
|
||
|
if hook, ok := i.Hooks.(GetAppVersionOverrideHooks); ok {
|
||
|
return hook.GetAppVersionOverride(i, ctx, portID, channelID)
|
||
|
}
|
||
|
|
||
|
if hook, ok := i.Hooks.(GetAppVersionBeforeHooks); ok {
|
||
|
hook.GetAppVersionBeforeHook(ctx, portID, channelID)
|
||
|
}
|
||
|
version, err := i.channel.GetAppVersion(ctx, portID, channelID)
|
||
|
if hook, ok := i.Hooks.(GetAppVersionAfterHooks); ok {
|
||
|
hook.GetAppVersionAfterHook(ctx, portID, channelID, version, err)
|
||
|
}
|
||
|
|
||
|
return version, err
|
||
|
}
|