// SPDX-License-Identifier: MIT pragma solidity >=0.8.9; import "../libraries/MsgDataTypes.sol"; import "../libraries/MessageSenderLib.sol"; import "./MessageReceiverApp.sol"; abstract contract MessageSenderApp is MessageReceiverApp { // ============== Utility functions called by apps ============== /** * @notice Sends a message associated with a transfer to a contract on another chain. * @param _receiver The address of the destination app contract. * @param _token The address of the token to be sent. * @param _amount The amount of tokens to be sent. * @param _dstChainId The destination chain ID. * @param _nonce A number input to guarantee uniqueness of transferId. Can be timestamp in practice. * @param _maxSlippage The max slippage accepted, given as percentage in point (pip). Eg. 5000 means 0.5%. * Must be greater than minimalMaxSlippage. Receiver is guaranteed to receive at least * (100% - max slippage percentage) * amount or the transfer can be refunded. * Only applicable to the {MsgDataTypes.BridgeSendType.Liquidity}. * @param _message Arbitrary message bytes to be decoded by the destination app contract. * If message is empty, only the token transfer will be sent * param _bridgeSendType One of the {BridgeSendType} enum. * @param _fee The fee amount to pay to MessageBus. * @return The transfer ID. */ function sendMessageWithTransfer( address _receiver, address _token, uint256 _amount, uint64 _dstChainId, uint64 _nonce, uint32 _maxSlippage, bytes memory _message, uint256 _fee ) internal returns (bytes32) { return MessageSenderLib.sendMessageWithTransfer( _receiver, _token, _amount, _dstChainId, _nonce, _maxSlippage, _message, messageBus, _fee ); } }