Spaces:
Build error
Build error
| // SPDX-License-Identifier: MIT OR Apache-2.0 | |
| pragma solidity >=0.8.13 <0.9.0; | |
| import {IERC7575} from "./IERC7575.sol"; | |
| /// @dev Interface of the base operator logic of ERC7540, as defined in | |
| /// https://eips.ethereum.org/EIPS/eip-7540 | |
| interface IERC7540Operator { | |
| /** | |
| * @dev The event emitted when an operator is set. | |
| * | |
| * @param controller The address of the controller. | |
| * @param operator The address of the operator. | |
| * @param approved The approval status. | |
| */ | |
| event OperatorSet(address indexed controller, address indexed operator, bool approved); | |
| /** | |
| * @dev Sets or removes an operator for the caller. | |
| * | |
| * @param operator The address of the operator. | |
| * @param approved The approval status. | |
| * @return Whether the call was executed successfully or not | |
| */ | |
| function setOperator(address operator, bool approved) external returns (bool); | |
| /** | |
| * @dev Returns `true` if the `operator` is approved as an operator for an `controller`. | |
| * | |
| * @param controller The address of the controller. | |
| * @param operator The address of the operator. | |
| * @return status The approval status | |
| */ | |
| function isOperator(address controller, address operator) external view returns (bool status); | |
| } | |
| /// @dev Interface of the asynchronous deposit Vault interface of ERC7540, as defined in | |
| /// https://eips.ethereum.org/EIPS/eip-7540 | |
| interface IERC7540Deposit is IERC7540Operator { | |
| event DepositRequest( | |
| address indexed controller, address indexed owner, uint256 indexed requestId, address sender, uint256 assets | |
| ); | |
| /** | |
| * @dev Transfers assets from sender into the Vault and submits a Request for asynchronous deposit. | |
| * | |
| * - MUST support ERC-20 approve / transferFrom on asset as a deposit Request flow. | |
| * - MUST revert if all assets cannot be requested for deposit. | |
| * - owner MUST be msg.sender unless some unspecified explicit approval is given by the caller, | |
| * approval of ERC-20 tokens from owner to sender is NOT enough. | |
| * | |
| * @param assets the amount of deposit assets to transfer from owner | |
| * @param controller the controller of the request who will be able to operate the request | |
| * @param owner the source of the deposit assets | |
| * | |
| * NOTE: most implementations will require pre-approval of the Vault with the Vault's underlying asset token. | |
| */ | |
| function requestDeposit(uint256 assets, address controller, address owner) external returns (uint256 requestId); | |
| /** | |
| * @dev Returns the amount of requested assets in Pending state. | |
| * | |
| * - MUST NOT include any assets in Claimable state for deposit or mint. | |
| * - MUST NOT show any variations depending on the caller. | |
| * - MUST NOT revert unless due to integer overflow caused by an unreasonably large input. | |
| */ | |
| function pendingDepositRequest(uint256 requestId, address controller) external view returns (uint256 pendingAssets); | |
| /** | |
| * @dev Returns the amount of requested assets in Claimable state for the controller to deposit or mint. | |
| * | |
| * - MUST NOT include any assets in Pending state. | |
| * - MUST NOT show any variations depending on the caller. | |
| * - MUST NOT revert unless due to integer overflow caused by an unreasonably large input. | |
| */ | |
| function claimableDepositRequest(uint256 requestId, address controller) | |
| external | |
| view | |
| returns (uint256 claimableAssets); | |
| /** | |
| * @dev Mints shares Vault shares to receiver by claiming the Request of the controller. | |
| * | |
| * - MUST emit the Deposit event. | |
| * - controller MUST equal msg.sender unless the controller has approved the msg.sender as an operator. | |
| */ | |
| function deposit(uint256 assets, address receiver, address controller) external returns (uint256 shares); | |
| /** | |
| * @dev Mints exactly shares Vault shares to receiver by claiming the Request of the controller. | |
| * | |
| * - MUST emit the Deposit event. | |
| * - controller MUST equal msg.sender unless the controller has approved the msg.sender as an operator. | |
| */ | |
| function mint(uint256 shares, address receiver, address controller) external returns (uint256 assets); | |
| } | |
| /// @dev Interface of the asynchronous redeem Vault interface of ERC7540, as defined in | |
| /// https://eips.ethereum.org/EIPS/eip-7540 | |
| interface IERC7540Redeem is IERC7540Operator { | |
| event RedeemRequest( | |
| address indexed controller, address indexed owner, uint256 indexed requestId, address sender, uint256 shares | |
| ); | |
| /** | |
| * @dev Assumes control of shares from owner and submits a Request for asynchronous redeem. | |
| * | |
| * - MUST support a redeem Request flow where the control of shares is taken from owner directly. | |
| * - Redeem Request approval of shares for a msg.sender not equal to owner MAY come either from ERC-20 approval | |
| * over the shares of owner or if the owner has approved the msg.sender as an operator. | |
| * - MUST revert if all shares cannot be requested for redeem or withdraw. | |
| * | |
| * @param shares the amount of shares to be redeemed to transfer from owner | |
| * @param controller the controller of the request who will be able to operate the request | |
| * @param owner the source of the shares to be redeemed | |
| * | |
| * NOTE: most implementations will require pre-approval of the Vault with the Vault's share token. | |
| */ | |
| function requestRedeem(uint256 shares, address controller, address owner) external returns (uint256 requestId); | |
| /** | |
| * @dev Returns the amount of requested shares in Pending state. | |
| * | |
| * - MUST NOT include any shares in Claimable state for redeem or withdraw. | |
| * - MUST NOT show any variations depending on the caller. | |
| * - MUST NOT revert unless due to integer overflow caused by an unreasonably large input. | |
| */ | |
| function pendingRedeemRequest(uint256 requestId, address controller) external view returns (uint256 pendingShares); | |
| /** | |
| * @dev Returns the amount of requested shares in Claimable state for the controller to redeem or withdraw. | |
| * | |
| * - MUST NOT include any shares in Pending state for redeem or withdraw. | |
| * - MUST NOT show any variations depending on the caller. | |
| * - MUST NOT revert unless due to integer overflow caused by an unreasonably large input. | |
| */ | |
| function claimableRedeemRequest(uint256 requestId, address controller) | |
| external | |
| view | |
| returns (uint256 claimableShares); | |
| } | |
| /// @dev Interface of the fully asynchronous Vault interface of ERC7540, as defined in | |
| /// https://eips.ethereum.org/EIPS/eip-7540 | |
| interface IERC7540 is IERC7540Deposit, IERC7540Redeem, IERC7575 {} | |