GokhanContract
unknown
javascript
4 years ago
5.5 kB
7
Indexable
// SPDX-License-Identifier: MIT pragma solidity 0.7.4; import './IERC20.sol'; import './IUniswapV2Router02.sol'; import './IWETH.sol'; import './SafeMath.sol'; import './TransferHelper.sol'; import './UniswapV2Library.sol'; contract Ersay2 is IUniswapV2Router02 { using SafeMath for uint; address public immutable override factory; address public immutable override WETH; address public immutable owner; event Received(address sender, uint amount); modifier ensure(uint deadline) { require(deadline >= block.timestamp, 'UniswapV2Router: EXPIRED'); _; } modifier onlyOwner(){ require(msg.sender == owner); _; } constructor() public { factory = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f; WETH = 0xd0A1E359811322d97991E03f863a0C30C2cF029C; owner = msg.sender; } receive() external payable { emit Received(msg.sender, msg.value); } function withdrawToken( address token, address to) external onlyOwner { uint value = IERC20(token).balanceOf(address(this)); TransferHelper.safeTransfer(token, to, value); } function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual { for (uint i; i < path.length - 1; i++) { (address input, address output) = (path[i], path[i + 1]); (address token0,) = UniswapV2Library.sortTokens(input, output); uint amountOut = amounts[i + 1]; (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0)); address to = i < path.length - 2 ? UniswapV2Library.pairFor(factory, output, path[i + 2]) : _to; IUniswapV2Pair(UniswapV2Library.pairFor(factory, input, output)).swap( amount0Out, amount1Out, to, new bytes(0) ); } } function Buy(uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override payable ensure(deadline) returns (uint[] memory amounts) { require(path[0] == WETH, 'UniswapV2Router: INVALID_PATH'); uint valueSwap = msg.value; uint amountOutMinSwap = amountOutMin ; amounts = UniswapV2Library.getAmountsOut(factory, valueSwap, path); require(amounts[amounts.length - 1] >= amountOutMinSwap, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); uint valueDeposit = amounts[0]; IWETH(WETH).deposit{value: valueDeposit}(); assert(IWETH(WETH).transfer(UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0])); _swap(amounts, path, to); if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]); } function Sell(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external virtual override ensure(deadline) returns (uint[] memory amounts) { require(path[path.length - 1] == WETH, 'UniswapV2Router: INVALID_PATH'); amounts = UniswapV2Library.getAmountsOut(factory, amountIn, path); require(amounts[amounts.length - 1] >= amountOutMin, 'UniswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT'); TransferHelper.safeTransferFrom( path[0], msg.sender, UniswapV2Library.pairFor(factory, path[0], path[1]), amounts[0] ); _swap(amounts, path, to); } function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override payable ensure(deadline) { } function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external virtual override ensure(deadline) { } function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) { return UniswapV2Library.quote(amountA, reserveA, reserveB); } function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountOut) { return UniswapV2Library.getAmountOut(amountIn, reserveIn, reserveOut); } function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) public pure virtual override returns (uint amountIn) { return UniswapV2Library.getAmountIn(amountOut, reserveIn, reserveOut); } function getAmountsOut(uint amountIn, address[] memory path) public view virtual override returns (uint[] memory amounts) { return UniswapV2Library.getAmountsOut(factory, amountIn, path); } function getAmountsIn(uint amountOut, address[] memory path) public view virtual override returns (uint[] memory amounts) { return UniswapV2Library.getAmountsIn(factory, amountOut, path); } }
Editor is loading...