From 791d04091addce28d40d4a23fcfbfec75c6d2133 Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Sat, 3 Sep 2022 01:04:50 +0530 Subject: [PATCH 1/4] code refactor --- .../connectors/compound/v3/helpers.sol | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/contracts/mainnet/connectors/compound/v3/helpers.sol b/contracts/mainnet/connectors/compound/v3/helpers.sol index 985685db..79a15cbd 100644 --- a/contracts/mainnet/connectors/compound/v3/helpers.sol +++ b/contracts/mainnet/connectors/compound/v3/helpers.sol @@ -77,16 +77,17 @@ abstract contract Helpers is DSMath, Basic { TokenInterface tokenContract = TokenInterface(token_); params.from = params.from == address(0) ? address(this) : params.from; - uint256 initialBal = CometInterface(params.market).borrowBalanceOf( - params.from - ); require( TokenInterface(params.market).balanceOf(params.from) == 0, "borrow-disabled-when-supplied-base" ); - _withdrawHelper(params.market, token_, params.from, params.to, amt_); + uint256 initialBal = CometInterface(params.market).borrowBalanceOf( + params.from + ); + + CometInterface(params.market).withdrawFrom(params.from, params.to, token_, amt_); uint256 finalBal = CometInterface(params.market).borrowBalanceOf( params.from @@ -126,24 +127,28 @@ abstract contract Helpers is DSMath, Basic { params.market, token_ ); - amt_ = amt_ == uint256(-1) ? initialBal : amt_; - if (token_ == getBaseToken(params.market)) { - uint256 balance = CometInterface(params.market).balanceOf( - params.from - ); + if (token_ == getBaseToken(market)) { //if there are supplies, ensure withdrawn amount is not greater than supplied i.e can't borrow using withdraw. - if (balance > 0) { - require(amt_ <= balance, "withdraw-amt-greater-than-supplies"); + if (amt_ == uint256(-1)) { + amt_ = initialBal; + } else { + require( + amt_ <= initialBal, + "withdraw-amt-greater-than-supplies" + ); } + //if borrow balance > 0, there are no supplies so no withdraw, borrow instead. require( - CometInterface(params.market).borrowBalanceOf(params.from) == 0, + CometInterface(market).borrowBalanceOf(params.from) == 0, "withdraw-disabled-for-zero-supplies" ); + } else { + amt_ = amt_ == uint256(-1) ? initialBal : amt_; } - _withdrawHelper(params.market, token_, params.from, params.to, amt_); + CometInterface(params.market).withdrawFrom(params.from, params.to, token_, amt_); uint256 finalBal = _getAccountSupplyBalanceOfAsset( params.from, @@ -245,12 +250,11 @@ abstract contract Helpers is DSMath, Basic { ? address(this).balance : TokenInterface(params.sellToken).balanceOf(address(this)); } + convertEthToWeth(isEth, TokenInterface(params.sellToken), sellAmt_); isEth = params.buyAsset == ethAddr; params.buyAsset = isEth ? wethAddr : params.buyAsset; - convertEthToWeth(isEth, TokenInterface(params.sellToken), sellAmt_); - uint256 slippageAmt_ = convert18ToDec( TokenInterface(params.buyAsset).decimals(), wmul( @@ -261,6 +265,7 @@ abstract contract Helpers is DSMath, Basic { ) ) ); + approve(TokenInterface(params.sellToken), params.market, sellAmt_); CometInterface(params.market).buyCollateral( params.buyAsset, From 611ff8a3e7b4e275d2eb8cce4d61e787f2cadb95 Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Sat, 3 Sep 2022 01:20:02 +0530 Subject: [PATCH 2/4] fixes --- .../connectors/compound/v3/helpers.sol | 25 +++------- .../mainnet/connectors/compound/v3/main.sol | 47 +++++-------------- 2 files changed, 18 insertions(+), 54 deletions(-) diff --git a/contracts/mainnet/connectors/compound/v3/helpers.sol b/contracts/mainnet/connectors/compound/v3/helpers.sol index 79a15cbd..52472e48 100644 --- a/contracts/mainnet/connectors/compound/v3/helpers.sol +++ b/contracts/mainnet/connectors/compound/v3/helpers.sol @@ -28,8 +28,7 @@ abstract contract Helpers is DSMath, Basic { enum Action { REPAY, - DEPOSIT, - TRANSFER + DEPOSIT } function getBaseToken(address market) @@ -52,11 +51,7 @@ abstract contract Helpers is DSMath, Basic { address to, uint256 amt ) internal { - if (from == address(this)) { - CometInterface(market).withdrawTo(to, token, amt); - } else { - CometInterface(market).withdrawFrom(from, to, token, amt); - } + CometInterface(market).withdrawFrom(from, to, token, amt); } function _borrow(BorrowWithdrawParams memory params) @@ -173,11 +168,7 @@ abstract contract Helpers is DSMath, Basic { address to, uint256 amt ) internal { - if (from == address(0)) { - CometInterface(market).transferAsset(to, token, amt); - } else { - CometInterface(market).transferAssetFrom(from, to, token, amt); - } + CometInterface(market).transferAssetFrom(from, to, token, amt); } function _getAccountSupplyBalanceOfAsset( @@ -213,13 +204,9 @@ abstract contract Helpers is DSMath, Basic { } else if (action == Action.DEPOSIT) { if (isEth) bal_ = src.balance; else bal_ = TokenInterface(token).balanceOf(src); - } else if (action == Action.TRANSFER) { - bal_ = (token == getBaseToken(market)) - ? TokenInterface(market).balanceOf(src) - : CometInterface(market).userCollateral(src, token).balance; - } - if (action == Action.TRANSFER) amt = bal_; - else amt = bal_ < allowance_ ? bal_ : allowance_; + } + + amt = bal_ < allowance_ ? bal_ : allowance_; } if (src == address(this)) convertEthToWeth(isEth, TokenInterface(token), amt); diff --git a/contracts/mainnet/connectors/compound/v3/main.sol b/contracts/mainnet/connectors/compound/v3/main.sol index 532d1a5d..688080d9 100644 --- a/contracts/mainnet/connectors/compound/v3/main.sol +++ b/contracts/mainnet/connectors/compound/v3/main.sol @@ -287,7 +287,7 @@ abstract contract CompoundV3Resolver is Events, Helpers { BorrowWithdrawParams({ market: market, token: token, - from: address(0), + from: address(this), to: to, amt: amt, getId: getId, @@ -407,12 +407,10 @@ abstract contract CompoundV3Resolver is Events, Helpers { TokenInterface tokenContract = TokenInterface(token_); - if (token_ == getBaseToken(market)) { - require( - CometInterface(market).balanceOf(address(this)) == 0, - "borrow-disabled-when-supplied-base" - ); - } + require( + CometInterface(market).balanceOf(address(this)) == 0, + "borrow-disabled-when-supplied-base" + ); uint256 initialBal = CometInterface(market).borrowBalanceOf( address(this) @@ -464,7 +462,7 @@ abstract contract CompoundV3Resolver is Events, Helpers { BorrowWithdrawParams({ market: market, token: token, - from: address(0), + from: address(this), to: to, amt: amt, getId: getId, @@ -804,23 +802,11 @@ abstract contract CompoundV3Resolver is Events, Helpers { "invalid market/token/to address" ); - bool isEth = token == ethAddr; - address token_ = isEth ? wethAddr : token; - TokenInterface tokenContract = TokenInterface(token_); + address token_ = token == ethAddr ? wethAddr : token; - convertEthToWeth(isEth, tokenContract, amt_); + amt_ = amt_ == uint256(-1) ? _getAccountSupplyBalanceOfAsset(address(this)) : amt_; - amt_ = amt_ == uint256(-1) - ? ( - (token_ == getBaseToken(market)) - ? TokenInterface(market).balanceOf(address(this)) - : CometInterface(market) - .userCollateral(address(this), token_) - .balance - ) - : amt_; - - _transfer(market, token_, address(0), dest, amt_); + CometInterface(market).transferAssetFrom(address(this), dest, token_, amt); setUint(setId, amt_); @@ -858,20 +844,11 @@ abstract contract CompoundV3Resolver is Events, Helpers { "invalid market/token/to address" ); - bool isEth = token == ethAddr; - address token_ = isEth ? wethAddr : token; - TokenInterface tokenContract = TokenInterface(token_); + address token_ = token == ethAddr ? wethAddr : token; - amt_ = _calculateFromAmount( - market, - token_, - src, - amt_, - isEth, - Action.TRANSFER - ); + amt_ = amt_ == uint256(-1) ? _getAccountSupplyBalanceOfAsset(src) : amt_; - _transfer(market, token_, src, dest, amt_); + CometInterface(market).transferAssetFrom(src, dest, token_, amt_); setUint(setId, amt_); From 745f7c6a61376a38c0ea079268eea190394743dc Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Sat, 3 Sep 2022 01:22:14 +0530 Subject: [PATCH 3/4] fixes --- .../mainnet/connectors/compound/v3/main.sol | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/contracts/mainnet/connectors/compound/v3/main.sol b/contracts/mainnet/connectors/compound/v3/main.sol index 688080d9..4b2c1ecf 100644 --- a/contracts/mainnet/connectors/compound/v3/main.sol +++ b/contracts/mainnet/connectors/compound/v3/main.sol @@ -717,14 +717,21 @@ abstract contract CompoundV3Resolver is Events, Helpers { TokenInterface tokenContract = TokenInterface(token_); - amt_ = _calculateFromAmount( - market, - token_, - from, - amt_, - isEth, - Action.REPAY - ); + if (amt_ == uint256(-1)) { + amt_ = _calculateFromAmount( + market, + token_, + from, + amt_, + isEth, + Action.REPAY + ); + } else { + require( + amt_ <= borrowedBalance_, + "withdraw-amt-greater-than-supplies" + ); + } uint256 supplyBalance_ = CometInterface(market).balanceOf(to); require(supplyBalance_ == 0, "cannot-repay-when-supplied"); From c40aa080e085bce314dea79193e671d7082951c3 Mon Sep 17 00:00:00 2001 From: Thrilok kumar Date: Sat, 3 Sep 2022 01:24:52 +0530 Subject: [PATCH 4/4] minor fix --- contracts/mainnet/connectors/compound/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/compound/v3/main.sol b/contracts/mainnet/connectors/compound/v3/main.sol index 4b2c1ecf..bbf0c667 100644 --- a/contracts/mainnet/connectors/compound/v3/main.sol +++ b/contracts/mainnet/connectors/compound/v3/main.sol @@ -594,7 +594,7 @@ abstract contract CompoundV3Resolver is Events, Helpers { ); if (amt_ == uint256(-1)) { - amt_ = initialBal; + amt_ = borrowedBalance_; } else { require( amt_ <= borrowedBalance_,