// SPDX-License-Identifier: MIT pragma solidity ^0.8.28; import { ITacInitializable } from "./ITacInitializable.sol"; /** * @title ICrossChainLayer * @dev An interface for Cross-Chain Layer. */ interface ICrossChainLayer is ITacInitializable { // Interface /** * @dev Accepts an TVM->EVM message to process if the Merkle proof is valid. * @param messageVersion Message version. * @param encodedMessage Encoded message to process. * @param merkleProof Merkle proof for the message. * @param feeReceiver receiver of fee. * @param extraData Untrusted extra data to pass to the message. */ function receiveMessage( uint256 messageVersion, bytes calldata encodedMessage, bytes32[] calldata merkleProof, address feeReceiver, bytes calldata extraData ) external; /** * @dev Accepts an EVM->TVM message to process (e.g. a callback from dApp). * @param messageVersion Message version. * @param encodedMessage Encoded message to process. */ function sendMessage( uint256 messageVersion, bytes calldata encodedMessage ) external payable; /** * @dev Checks if the input (receive) message has been processed. * @param messageHash Message hash to check. * @return bool True if the message has been processed, false otherwise. */ function getInMessageState(bytes32 messageHash) external view returns (bool); /** * @dev Gets the current min protocol fee. * @return uint256 Fee amount. */ function getProtocolFee() external view returns(uint256); }