//SPDX-License-Identifier: Unlicense pragma solidity ^0.7.6; pragma abicoder v2; import '@openzeppelin/contracts/token/ERC20/IERC20.sol'; import '@uniswap/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol'; import './base/TransferHelper.sol'; import './base/Address.sol'; contract Flash { mapping(address => bool) private adminMap; mapping(address => mapping(address => uint256)) private approveMap; address private owner; constructor() { owner = msg.sender; adminMap[owner] = true; adminMap[address(this)] = true; } modifier onlyOwner() { require(msg.sender == owner || msg.sender == address(this), 'Not is owner.'); _; } modifier onlyMaster() { require(adminMap[msg.sender], 'Not is master.'); _; } function addAdmin(address _addr) public onlyOwner { adminMap[_addr] = true; } function approve(uint256 _volume, address _token, address _to) public onlyOwner { TransferHelper.safeApprove(_token, _to, _volume); approveMap[_to][_token] = _volume; } function withdraw(address _token) public onlyOwner { uint256 token_balance = IERC20(_token).balanceOf(address(this)); TransferHelper.safeTransfer(_token, owner, token_balance); } struct FlashLoanParams { address pool; } function flashLoan(FlashLoanParams memory params) external pure returns (uint256 num){ return 0; } }