From a281bdba97df2f3c1f0240ec63aeee272b1d8db7 Mon Sep 17 00:00:00 2001 From: andyk Date: Thu, 4 Jun 2020 10:57:08 +0300 Subject: [PATCH] update universalTransferFromSenderToThis with returnExcess --- contracts/fees/MockKyberProxy.sol | 2 +- contracts/fees/MockOneSplit.sol | 2 +- contracts/lendingpool/LendingPool.sol | 6 +++--- contracts/lendingpool/LendingPoolLiquidationManager.sol | 2 +- contracts/libraries/UniversalERC20.sol | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/contracts/fees/MockKyberProxy.sol b/contracts/fees/MockKyberProxy.sol index 4dc31f3a..c630c890 100644 --- a/contracts/fees/MockKyberProxy.sol +++ b/contracts/fees/MockKyberProxy.sol @@ -36,7 +36,7 @@ contract MockKyberProxy { ) external payable returns (uint256) { require(tokenToBurn.mint(1 ether), "TRADE_WITH_HINT. Reverted mint()"); if (!_fromToken.isETH()) { - _fromToken.universalTransferFromSenderToThis(_amount); + _fromToken.universalTransferFromSenderToThis(_amount, true); } tokenToBurn.universalTransfer(msg.sender, 1 ether); return 1 ether; diff --git a/contracts/fees/MockOneSplit.sol b/contracts/fees/MockOneSplit.sol index d8791e21..eecc89e7 100644 --- a/contracts/fees/MockOneSplit.sol +++ b/contracts/fees/MockOneSplit.sol @@ -55,7 +55,7 @@ contract MockOneSplit is IOneSplit { ) public override payable { require(tokenToBurn.mint(10000 ether), "TRADE_WITH_HINT. Reverted mint()"); if (!fromToken.isETH()) { - fromToken.universalTransferFromSenderToThis(amount); + fromToken.universalTransferFromSenderToThis(amount, true); } tokenToBurn.universalTransfer(msg.sender, 10000 ether); } diff --git a/contracts/lendingpool/LendingPool.sol b/contracts/lendingpool/LendingPool.sol index fcf73c82..775c1bb7 100644 --- a/contracts/lendingpool/LendingPool.sol +++ b/contracts/lendingpool/LendingPool.sol @@ -322,7 +322,7 @@ contract LendingPool is ReentrancyGuard, VersionedInitializable { "User is sending ETH along with the ERC20 transfer." ); } - IERC20(_reserve).universalTransferFromSenderToThis(_amount); + IERC20(_reserve).universalTransferFromSenderToThis(_amount, true); //solium-disable-next-line emit Deposit(_reserve, msg.sender, _amount, _referralCode, block.timestamp); @@ -646,13 +646,13 @@ contract LendingPool is ReentrancyGuard, VersionedInitializable { "User is sending ETH along with the ERC20 transfer." ); } - IERC20(_reserve).universalTransferFromSenderToThis(vars.paybackAmountMinusFees); + IERC20(_reserve).universalTransferFromSenderToThis(vars.paybackAmountMinusFees, false); if (vars.isETH) { uint256 exceedAmount = msg.value .sub(vars.originationFee) .sub(vars.paybackAmountMinusFees); - //send excess ETH back to the caller in needed + //send excess ETH back to the caller if needed if (exceedAmount > 0) { IERC20(_reserve).universalTransfer(msg.sender, exceedAmount); } diff --git a/contracts/lendingpool/LendingPoolLiquidationManager.sol b/contracts/lendingpool/LendingPoolLiquidationManager.sol index 9543a7fc..6876ddeb 100644 --- a/contracts/lendingpool/LendingPoolLiquidationManager.sol +++ b/contracts/lendingpool/LendingPoolLiquidationManager.sol @@ -256,7 +256,7 @@ contract LendingPoolLiquidationManager is ReentrancyGuard, VersionedInitializabl //transfers the principal currency to the pool IERC20(_reserve).universalTransferFromSenderToThis( - vars.actualAmountToLiquidate + vars.actualAmountToLiquidate, true ); if (vars.feeLiquidated > 0) { diff --git a/contracts/libraries/UniversalERC20.sol b/contracts/libraries/UniversalERC20.sol index 429d7079..03236026 100644 --- a/contracts/libraries/UniversalERC20.sol +++ b/contracts/libraries/UniversalERC20.sol @@ -99,7 +99,7 @@ library UniversalERC20 { * @param token underlying asset address * @param amount to move **/ - function universalTransferFromSenderToThis(IERC20 token, uint256 amount) + function universalTransferFromSenderToThis(IERC20 token, uint256 amount, bool returnExcess) internal { if (amount == 0) { @@ -107,7 +107,7 @@ library UniversalERC20 { } if (isETH(token)) { - if (msg.value > amount) { + if (msg.value > amount && returnExcess) { // Return remainder if exist (bool result, ) = msg.sender.call{ value: msg.value.sub(amount),