65 lines
2.2 KiB
Solidity
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);
|
|
}
|