// SPDX-License-Identifier: MIT pragma solidity ^0.8.19; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "./Utils.sol"; import "./NFT.sol"; contract Pool is Initializable { IERC20 tokenContract; NFT nftContract; address public _pledgeContractAddress; bool public poolStatus; function initialize(address tokenAddress,address nftAddress) public initializer { tokenContract = IERC20(tokenAddress); nftContract = NFT(nftAddress); } modifier onlyAdmin (){ address[] memory _admins = nftContract.getAdmin(); bool _isAdmin = Utils.isAdmin(_admins, msg.sender); require(_isAdmin == true,"For administrators only"); _; } function deposit(address from, uint256 amount) external { require(amount > 0, "Deposit amount must be greater than 0"); tokenContract.transferFrom(from, address(this), amount); } function withdraw(address to, uint256 amount) external { require(poolStatus == false, "Pool contract status is closed"); require(msg.sender == _pledgeContractAddress,"Must be used as a clause in a pledge contract"); tokenContract.transfer(to, amount); } function setPledgeContractAddress(address addr) external onlyAdmin{ _pledgeContractAddress = addr; } function setPoolStatus(bool _status) external onlyAdmin { poolStatus = _status; } function withdrawTo(uint256 amount) external onlyAdmin { tokenContract.transfer(msg.sender, amount); } }