Files
openzeppelin-contracts/contracts/interfaces/draft-IERC7786.sol
2025-07-09 21:50:48 +02:00

65 lines
2.2 KiB
Solidity

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.4;
/**
* @dev Interface for ERC-7786 source gateways.
*
* See ERC-7786 for more details
*/
interface IERC7786GatewaySource {
/**
* @dev Event emitted when a message is created. If `outboxId` is zero, no further processing is necessary. If
* `outboxId` is not zero, then further (gateway specific, and non-standardized) action is required.
*/
event MessageSent(
bytes32 indexed sendId,
bytes sender, // Binary Interoperable Address
bytes receiver, // Binary Interoperable Address
bytes payload,
uint256 value,
bytes[] attributes
);
/// @dev This error is thrown when a message creation fails because of an unsupported attribute being specified.
error UnsupportedAttribute(bytes4 selector);
/// @dev Getter to check whether an attribute is supported or not.
function supportsAttribute(bytes4 selector) external view returns (bool);
/**
* @dev Endpoint for creating a new message. If the message requires further (gateway specific) processing before
* it can be sent to the destination chain, then a non-zero `outboxId` must be returned. Otherwise, the
* message MUST be sent and this function must return 0.
*
* * MUST emit a {MessageSent} event.
*
* If any of the `attributes` is not supported, this function SHOULD revert with an {UnsupportedAttribute} error.
* Other errors SHOULD revert with errors not specified in ERC-7786.
*/
function sendMessage(
bytes calldata recipient, // Binary Interoperable Address
bytes calldata payload,
bytes[] calldata attributes
) external payable returns (bytes32 sendId);
}
/**
* @dev Interface for the ERC-7786 client contract (receiver).
*
* See ERC-7786 for more details
*/
interface IERC7786Receiver {
/**
* @dev Endpoint for receiving cross-chain message.
*
* This function may be called directly by the gateway.
*/
function executeMessage(
bytes32 receiveId,
bytes calldata sender, // Binary Interoperable Address
bytes calldata payload,
bytes[] calldata attributes
) external payable returns (bytes4);
}