pragma solidity =0.6.6; import '../interfaces/IPangolinRouter.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( IPangolinRouter(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( IPangolinRouter(router).swapTokensForExactTokens.selector, amountOut, amountInMax, path, to, deadline )); assert(success); emit Amounts(abi.decode(returnData, (uint[]))); } function swapExactAVAXForTokens( address router, uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable { (bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector( IPangolinRouter(router).swapExactAVAXForTokens.selector, amountOutMin, path, to, deadline )); assert(success); emit Amounts(abi.decode(returnData, (uint[]))); } function swapTokensForExactAVAX( address router, uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external { (bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector( IPangolinRouter(router).swapTokensForExactAVAX.selector, amountOut, amountInMax, path, to, deadline )); assert(success); emit Amounts(abi.decode(returnData, (uint[]))); } function swapExactTokensForAVAX( address router, uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external { (bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector( IPangolinRouter(router).swapExactTokensForAVAX.selector, amountIn, amountOutMin, path, to, deadline )); assert(success); emit Amounts(abi.decode(returnData, (uint[]))); } function swapAVAXForExactTokens( address router, uint amountOut, address[] calldata path, address to, uint deadline ) external payable { (bool success, bytes memory returnData) = router.delegatecall(abi.encodeWithSelector( IPangolinRouter(router).swapAVAXForExactTokens.selector, amountOut, path, to, deadline )); assert(success); emit Amounts(abi.decode(returnData, (uint[]))); } }