diff --git a/contracts/buyback/Buyback.sol b/contracts/buyback/Buyback.sol index d2e3c8d..150363c 100644 --- a/contracts/buyback/Buyback.sol +++ b/contracts/buyback/Buyback.sol @@ -174,7 +174,7 @@ contract Buyback is require(routerWhitelist[_router], "router not whitelisted"); uint256 beforeTokenIn = _getTokenBalance(_tokenIn, address(this)); - uint256 beforeTokenOut = _getTokenBalance(_tokenOut, receiver); + uint256 beforeTokenOut = _getTokenBalance(_tokenOut, address(this)); bool isNativeTokenIn = (_tokenIn == SWAP_NATIVE_TOKEN_ADDRESS); if (!isNativeTokenIn) { @@ -188,11 +188,13 @@ contract Buyback is } uint256 actualAmountIn = beforeTokenIn - _getTokenBalance(_tokenIn, address(this)); - uint256 actualAmountOut = _getTokenBalance(_tokenOut, receiver) - beforeTokenOut; + uint256 actualAmountOut = _getTokenBalance(_tokenOut, address(this)) - beforeTokenOut; require(actualAmountIn <= _amountIn, "exceed amount in"); require(actualAmountOut >= _amountOutMin, "not enough profit"); + IERC20(_tokenOut).safeTransfer(receiver, actualAmountOut); + emit BoughtBack(_router, _tokenIn, _tokenOut, actualAmountIn, actualAmountOut); } diff --git a/contracts/dao/ListaAutoBuyback.sol b/contracts/dao/ListaAutoBuyback.sol index 55165da..99cc1e3 100644 --- a/contracts/dao/ListaAutoBuyback.sol +++ b/contracts/dao/ListaAutoBuyback.sol @@ -150,7 +150,7 @@ contract ListaAutoBuyback is Initializable, AccessControlUpgradeable { require(routerWhitelist[_router], "router not whitelisted"); uint256 beforeTokenIn = _getTokenBalance(_tokenIn, address(this)); - uint256 beforeTokenOut = _getTokenBalance(_tokenOut, defaultReceiver); + uint256 beforeTokenOut = _getTokenBalance(_tokenOut, address(this)); bool isNativeTokenIn = (_tokenIn == SWAP_NATIVE_TOKEN_ADDRESS); if (!isNativeTokenIn) { @@ -163,11 +163,13 @@ contract ListaAutoBuyback is Initializable, AccessControlUpgradeable { } uint256 actualAmountIn = beforeTokenIn - _getTokenBalance(_tokenIn, address(this)); - uint256 actualAmountOut = _getTokenBalance(_tokenOut, defaultReceiver) - beforeTokenOut; + uint256 actualAmountOut = _getTokenBalance(_tokenOut, address(this)) - beforeTokenOut; require(actualAmountIn <= _amountIn, "exceed amount in"); require(actualAmountOut >= _amountOutMin, "not enough profit"); + IERC20(_tokenOut).safeTransfer(defaultReceiver, actualAmountOut); + emit BoughtBack(_router, _tokenIn, _tokenOut, actualAmountIn, actualAmountOut); }