// SPDX-License-Identifier: MIT pragma solidity 0.8.17; interface InterfaceOrigin { // ═══════════════════════════════════════════════ SEND MESSAGES ═══════════════════════════════════════════════════ /** * @notice Send a message to the recipient located on destination domain. * @dev Recipient has to conform to IMessageRecipient interface, otherwise message won't be delivered. * Will revert if any of these is true: * - `destination` is equal to contract's local domain * - `content` length is greater than `MAX_CONTENT_BYTES` * - `msg.value` is lower than value of minimum tips for the given message * @param destination Domain of destination chain * @param recipient Address of recipient on destination chain as bytes32 * @param optimisticPeriod Optimistic period for message execution on destination chain * @param paddedRequest Padded encoded message execution request on destination chain * @param content Raw bytes content of message * @return messageNonce Nonce of the sent message * @return messageHash Hash of the sent message */ function sendBaseMessage( uint32 destination, bytes32 recipient, uint32 optimisticPeriod, uint256 paddedRequest, bytes memory content ) external payable returns (uint32 messageNonce, bytes32 messageHash); /** * @notice Send a manager message to the destination domain. * @dev This could only be called by AgentManager, which takes care of encoding the calldata payload. * Note: (msgOrigin, proofMaturity) security args will be added to payload on the destination chain * so that the AgentManager could verify where the Manager Message came from and how mature is the proof. * Note: function is not payable, as no tips are required for sending a manager message. * Will revert if `destination` is equal to contract's local domain. * @param destination Domain of destination chain * @param optimisticPeriod Optimistic period for message execution on destination chain * @param payload Payload for calling AgentManager on destination chain (with extra security args) */ function sendManagerMessage(uint32 destination, uint32 optimisticPeriod, bytes memory payload) external returns (uint32 messageNonce, bytes32 messageHash); // ════════════════════════════════════════════════ TIPS LOGIC ═════════════════════════════════════════════════════ /** * @notice Withdraws locked base message tips to the recipient. * @dev Could only be called by a local AgentManager. * @param recipient Address to withdraw tips to * @param amount Tips value to withdraw */ function withdrawTips(address recipient, uint256 amount) external; // ═══════════════════════════════════════════════════ VIEWS ═══════════════════════════════════════════════════════ /** * @notice Returns the minimum tips value for sending a message to a given destination. * @dev Using at least `tipsValue` as `msg.value` for `sendBaseMessage()` * will guarantee that the message will be accepted. * @param destination Domain of destination chain * @param paddedRequest Padded encoded message execution request on destination chain * @param contentLength The length of the message content * @return tipsValue Minimum tips value for a message to be accepted */ function getMinimumTipsValue(uint32 destination, uint256 paddedRequest, uint256 contentLength) external view returns (uint256 tipsValue); }