github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/ibc-go/modules/apps/29-fee/keeper/relay.go (about) 1 package keeper 2 3 import ( 4 "fmt" 5 6 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 7 sdkerrors "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types/errors" 8 capabilitytypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/capability/types" 9 "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/apps/29-fee/types" 10 channeltypes "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/04-channel/types" 11 ibcexported "github.com/fibonacci-chain/fbc/libs/ibc-go/modules/core/exported" 12 ) 13 14 // SendPacket wraps IBC ChannelKeeper's SendPacket function 15 func (k Keeper) SendPacket(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI) error { 16 return k.ics4Wrapper.SendPacket(ctx, chanCap, packet) 17 } 18 19 // WriteAcknowledgement wraps IBC ChannelKeeper's WriteAcknowledgement function 20 // ICS29 WriteAcknowledgement is used for asynchronous acknowledgements 21 func (k Keeper) WriteAcknowledgement(ctx sdk.Context, chanCap *capabilitytypes.Capability, packet ibcexported.PacketI, acknowledgement ibcexported.Acknowledgement) error { 22 if !k.IsFeeEnabled(ctx, packet.GetDestPort(), packet.GetDestChannel()) { 23 // ics4Wrapper may be core IBC or higher-level middleware 24 return k.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, packet, acknowledgement) 25 } 26 27 packetID := channeltypes.NewPacketId(packet.GetDestPort(), packet.GetDestChannel(), packet.GetSequence()) 28 29 // retrieve the forward relayer that was stored in `onRecvPacket` 30 relayer, found := k.GetRelayerAddressForAsyncAck(ctx, packetID) 31 if !found { 32 return sdkerrors.Wrapf(types.ErrRelayerNotFoundForAsyncAck, "no relayer address stored for async acknowledgement for packet with portID: %s, channelID: %s, sequence: %d", packetID.PortId, packetID.ChannelId, packetID.Sequence) 33 } 34 35 // it is possible that a relayer has not registered a counterparty address. 36 // if there is no registered counterparty address then write acknowledgement with empty relayer address and refund recv_fee. 37 forwardRelayer, _ := k.GetCounterpartyPayeeAddress(ctx, relayer, packet.GetDestChannel()) 38 39 ack := types.NewIncentivizedAcknowledgement(forwardRelayer, acknowledgement.Acknowledgement(), acknowledgement.Success()) 40 41 k.DeleteForwardRelayerAddress(ctx, packetID) 42 43 // ics4Wrapper may be core IBC or higher-level middleware 44 return k.ics4Wrapper.WriteAcknowledgement(ctx, chanCap, packet, ack) 45 } 46 47 // GetAppVersion returns the underlying application version. 48 func (k Keeper) GetAppVersion(ctx sdk.Context, portID, channelID string) (string, bool) { 49 version, found := k.ics4Wrapper.GetAppVersion(ctx, portID, channelID) 50 if !found { 51 return "", false 52 } 53 54 if !k.IsFeeEnabled(ctx, portID, channelID) { 55 return version, true 56 } 57 58 var metadata types.Metadata 59 if err := types.ModuleCdc.UnmarshalJSON([]byte(version), &metadata); err != nil { 60 panic(fmt.Errorf("unable to unmarshal metadata for fee enabled channel: %w", err)) 61 } 62 63 return metadata.AppVersion, true 64 }