|
@@ -0,0 +1,64 @@
|
|
|
+// 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);
|
|
|
+}
|