98 lines
3.1 KiB
Solidity
98 lines
3.1 KiB
Solidity
pragma solidity =0.6.6;
|
|
|
|
import '../interfaces/IUniswapV2Router01.sol';
|
|
|
|
contract RouterEventEmitter {
|
|
event Amounts(uint[] amounts);
|
|
|
|
receive() external payable {}
|
|
|
|
function swapExactTokensForTokens(
|
|
address router,
|
|
uint amountIn,
|
|
uint amountOutMin,
|
|
address[] calldata path,
|
|
address to,
|
|
uint deadline
|
|
) external {
|
|
(bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector(
|
|
IUniswapV2Router01(router).swapExactTokensForTokens.selector, amountIn, amountOutMin, path, to, deadline
|
|
));
|
|
assert(success);
|
|
emit Amounts(abi.decode(returnData, (uint[])));
|
|
}
|
|
|
|
function swapTokensForExactTokens(
|
|
address router,
|
|
uint amountOut,
|
|
uint amountInMax,
|
|
address[] calldata path,
|
|
address to,
|
|
uint deadline
|
|
) external {
|
|
(bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector(
|
|
IUniswapV2Router01(router).swapTokensForExactTokens.selector, amountOut, amountInMax, path, to, deadline
|
|
));
|
|
assert(success);
|
|
emit Amounts(abi.decode(returnData, (uint[])));
|
|
}
|
|
|
|
function swapExactETHForTokens(
|
|
address router,
|
|
uint amountOutMin,
|
|
address[] calldata path,
|
|
address to,
|
|
uint deadline
|
|
) external payable {
|
|
(bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector(
|
|
IUniswapV2Router01(router).swapExactETHForTokens.selector, amountOutMin, path, to, deadline
|
|
));
|
|
assert(success);
|
|
emit Amounts(abi.decode(returnData, (uint[])));
|
|
}
|
|
|
|
function swapTokensForExactETH(
|
|
address router,
|
|
uint amountOut,
|
|
uint amountInMax,
|
|
address[] calldata path,
|
|
address to,
|
|
uint deadline
|
|
) external {
|
|
(bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector(
|
|
IUniswapV2Router01(router).swapTokensForExactETH.selector, amountOut, amountInMax, path, to, deadline
|
|
));
|
|
assert(success);
|
|
emit Amounts(abi.decode(returnData, (uint[])));
|
|
}
|
|
|
|
function swapExactTokensForETH(
|
|
address router,
|
|
uint amountIn,
|
|
uint amountOutMin,
|
|
address[] calldata path,
|
|
address to,
|
|
uint deadline
|
|
) external {
|
|
(bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector(
|
|
IUniswapV2Router01(router).swapExactTokensForETH.selector, amountIn, amountOutMin, path, to, deadline
|
|
));
|
|
assert(success);
|
|
emit Amounts(abi.decode(returnData, (uint[])));
|
|
}
|
|
|
|
function swapETHForExactTokens(
|
|
address router,
|
|
uint amountOut,
|
|
address[] calldata path,
|
|
address to,
|
|
uint deadline
|
|
) external payable {
|
|
(bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector(
|
|
IUniswapV2Router01(router).swapETHForExactTokens.selector, amountOut, path, to, deadline
|
|
));
|
|
assert(success);
|
|
emit Amounts(abi.decode(returnData, (uint[])));
|
|
}
|
|
}
|