pragma solidity =0.6.6; import 'moonwalkerswap-libraries/contracts/libraries/TransferHelper.sol'; import './interfaces/IMoonwalkerswapV2Migrator.sol'; import './interfaces/V1/IMoonwalkerswapV1Factory.sol'; import './interfaces/V1/IMoonwalkerswapV1Exchange.sol'; import './interfaces/IMoonwalkerswapV2Router01.sol'; import './interfaces/IERC20.sol'; contract MoonwalkerswapV2Migrator is IMoonwalkerswapV2Migrator { IMoonwalkerswapV1Factory immutable factoryV1; IMoonwalkerswapV2Router01 immutable router; constructor(address _factoryV1, address _router) public { factoryV1 = IMoonwalkerswapV1Factory(_factoryV1); router = IMoonwalkerswapV2Router01(_router); } receive() external payable {} function migrate(address token, uint amountTokenMin, uint amountAVAXMin, address to, uint deadline) external override { IMoonwalkerswapV1Exchange exchangeV1 = IMoonwalkerswapV1Exchange(factoryV1.getExchange(token)); uint liquidityV1 = exchangeV1.balanceOf(msg.sender); require(exchangeV1.transferFrom(msg.sender, address(this), liquidityV1), 'TRANSFER_FROM_FAILED'); (uint amountAVAXV1, uint amountTokenV1) = exchangeV1.removeLiquidity(liquidityV1, 1, 1, uint(-1)); TransferHelper.safeApprove(token, address(router), amountTokenV1); } }