The Callbacks module provides a standardized interface for smart contracts to handle IBC (Inter-Blockchain Communication) packet lifecycle events. This allows contracts to implement callback functions that are invoked when packets are acknowledged or time out during cross-chain communication.
This is not a precompile that is called directly, but rather an interface that a contract must implement to receive callbacks.
A contract that sends an IBC transfer may need to listen for the outcome of the packet lifecycle. Ack and Timeout callbacks allow contracts to execute custom logic on the basis of how the packet lifecycle completes. The sender of an IBC transfer packet may specify a contract to be called when the packet lifecycle completes. This contract must implement the expected entrypoints for onPacketAcknowledgement and onPacketTimeout.
Critically, only the IBC packet sender can set the callback.
Description: Callback function invoked on the source chain after a packet lifecycle is completed and acknowledgement is processed. The contract implementing this interface receives packet information and acknowledgement data to execute custom callback logic.
Description: Callback function invoked on the source chain after a packet lifecycle is completed and the packet has timed out. The contract implementing this interface receives packet information to execute custom timeout handling logic.
// SPDX-License-Identifier: LGPL-3.0-onlypragma solidity >=0.8.18;interface ICallbacks { /// @dev Callback function to be called on the source chain /// after the packet life cycle is completed and acknowledgement is processed /// by source chain. The contract address is passed the packet information and acknowledgmeent /// to execute the callback logic. /// @param channelId the channnel identifier of the packet /// @param portId the port identifier of the packet /// @param sequence the sequence number of the packet /// @param data the data of the packet /// @param acknowledgement the acknowledgement of the packet function onPacketAcknowledgement( string memory channelId, string memory portId, uint64 sequence, bytes memory data, bytes memory acknowledgement ) external; /// @dev Callback function to be called on the source chain /// after the packet life cycle is completed and the packet is timed out /// by source chain. The contract address is passed the packet information /// to execute the callback logic. /// @param channelId the channnel identifier of the packet /// @param portId the port identifier of the packet /// @param sequence the sequence number of the packet /// @param data the data of the packet function onPacketTimeout( string memory channelId, string memory portId, uint64 sequence, bytes memory data ) external;}