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