From 46ae8e333a6df5fcb128fb6e3526b655a5c2cc6f Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 00:53:09 +0400 Subject: [PATCH 01/33] New functions added --- .../polygon/connectors/aave/v3/events.sol | 6 + .../polygon/connectors/aave/v3/helpers.sol | 17 +++ .../polygon/connectors/aave/v3/interface.sol | 4 + contracts/polygon/connectors/aave/v3/main.sol | 112 +++++++++++++++++- 4 files changed, 138 insertions(+), 1 deletion(-) diff --git a/contracts/polygon/connectors/aave/v3/events.sol b/contracts/polygon/connectors/aave/v3/events.sol index b29b4425..3b2513dd 100644 --- a/contracts/polygon/connectors/aave/v3/events.sol +++ b/contracts/polygon/connectors/aave/v3/events.sol @@ -32,4 +32,10 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); + event LogApproveDelegation( + address token, + uint16 debtType, + address delegateTo, + uint256 amount + ); } diff --git a/contracts/polygon/connectors/aave/v3/helpers.sol b/contracts/polygon/connectors/aave/v3/helpers.sol index 567e9ddd..01fc3bcb 100644 --- a/contracts/polygon/connectors/aave/v3/helpers.sol +++ b/contracts/polygon/connectors/aave/v3/helpers.sol @@ -64,4 +64,21 @@ abstract contract Helpers is DSMath, Basic { address(this) ); } + + /** + * @dev Get debt token address for an asset + * @param token token address of the asset + * @param rateMode Debt type: stable-1, variable-2 + */ + function getDTokenAddr(address token, uint16 rateMode) + internal + view + returns(address dToken) + { + if (rateMode == 1) { + (, dToken, ) = aaveData.getReserveTokensAddresses(token); + } else { + (, , dToken) = aaveData.getReserveTokensAddresses(token); + } + } } diff --git a/contracts/polygon/connectors/aave/v3/interface.sol b/contracts/polygon/connectors/aave/v3/interface.sol index 81553143..6de08261 100644 --- a/contracts/polygon/connectors/aave/v3/interface.sol +++ b/contracts/polygon/connectors/aave/v3/interface.sol @@ -90,3 +90,7 @@ interface AaveAddressProviderRegistryInterface { interface ATokenInterface { function balanceOf(address _user) external view returns (uint256); } + +interface DTokenInterface { + function approveDelegation(address delegatee, uint256 amount) external; +} diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index 44c5c57a..74ad6bcb 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -10,7 +10,7 @@ import { TokenInterface } from "../../../common/interfaces.sol"; import { Stores } from "../../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; -import { AaveInterface } from "./interface.sol"; +import { AaveInterface, DTokenInterface } from "./interface.sol"; abstract contract AaveResolver is Events, Helpers { /** @@ -63,6 +63,52 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, getId, setId); } + /** + * @dev Deposit Matic/ERC20_Token. + * @notice Deposit a token to Aave v3 for lending / collaterization. + * @param token The address of the token to deposit.(For Matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. + */ + function depositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isMatic = token == maticAddr; + address _token = isMatic ? wmaticAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + if (isMatic) { + _amt = _amt == uint256(-1) ? address(this).balance : _amt; + convertMaticToWmatic(isMatic, tokenContract, _amt); + } else { + _amt = _amt == uint256(-1) + ? tokenContract.balanceOf(address(this)) + : _amt; + } + + approve(tokenContract, address(aave), _amt); + + aave.supply(_token, _amt, address(this), referralCode); + + setUint(setId, _amt); + + _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, getId, setId); + } + /** * @dev Withdraw matic/ERC20_Token. * @notice Withdraw deposited token from Aave v3 @@ -139,6 +185,44 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Borrow matic/ERC20_Token on behalf of a user. + * @notice Borrow a token using Aave v3 on behalf of a user + * @param token The address of the token to borrow.(For matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to borrow. + * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param onBehalfOf The user who will incur the debt + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens borrowed. + */ + function borrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isMatic = token == maticAddr; + address _token = isMatic ? wmaticAddr : token; + + aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); + convertWmaticToMatic(isMatic, TokenInterface(_token), _amt); + + setUint(setId, _amt); + + _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + } + /** * @dev Payback borrowed matic/ERC20_Token. * @notice Payback debt owed. @@ -317,6 +401,32 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogSetUserEMode(uint8)"; _eventParam = abi.encode(categoryId); } + + /** + * @dev Approve Delegation + * @notice Gives approval to delegate debt tokens + * @param token The address of token + * @param rateMode The type of borrow debt + * @param delegateTo The address to whom the user is delegating + * @param amount The amount + */ + function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + + bool isMatic = token == maticAddr; + address _token = isMatic ? wmaticAddr : token; + + address _dToken = getDTokenAddr(_token, rateMode); + DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + + _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; + _eventParam = abi.encode(token, rateMode, delegateTo, amount); + + } } contract ConnectV2AaveV3Polygon is AaveResolver { From cdf9a737a14793149791e7d5f886fe188adc81e3 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 02:27:52 +0400 Subject: [PATCH 02/33] modified depositWithoutCollateral() --- contracts/polygon/connectors/aave/v3/main.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index 74ad6bcb..30a9f8ce 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -103,6 +103,10 @@ abstract contract AaveResolver is Events, Helpers { aave.supply(_token, _amt, address(this), referralCode); + if (getCollateralBalance(_token) > 0 && getIsColl(token)) { + aave.setUserUseReserveAsCollateral(_token, false); + } + setUint(setId, _amt); _eventName = "LogDeposit(address,uint256,uint256,uint256)"; From 8ae6b45e4226a518cc3df94035408a1822a65d4b Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 02:37:51 +0400 Subject: [PATCH 03/33] Aave v3 updates on Optimism --- .../optimism/connectors/aave/v3/events.sol | 6 + .../optimism/connectors/aave/v3/helpers.sol | 17 +++ .../optimism/connectors/aave/v3/interface.sol | 4 + .../optimism/connectors/aave/v3/main.sol | 116 +++++++++++++++++- 4 files changed, 142 insertions(+), 1 deletion(-) diff --git a/contracts/optimism/connectors/aave/v3/events.sol b/contracts/optimism/connectors/aave/v3/events.sol index b29b4425..3b2513dd 100644 --- a/contracts/optimism/connectors/aave/v3/events.sol +++ b/contracts/optimism/connectors/aave/v3/events.sol @@ -32,4 +32,10 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); + event LogApproveDelegation( + address token, + uint16 debtType, + address delegateTo, + uint256 amount + ); } diff --git a/contracts/optimism/connectors/aave/v3/helpers.sol b/contracts/optimism/connectors/aave/v3/helpers.sol index ae72fa02..d7f8f0a2 100644 --- a/contracts/optimism/connectors/aave/v3/helpers.sol +++ b/contracts/optimism/connectors/aave/v3/helpers.sol @@ -64,4 +64,21 @@ abstract contract Helpers is DSMath, Basic { address(this) ); } + + /** + * @dev Get debt token address for an asset + * @param token token address of the asset + * @param rateMode Debt type: stable-1, variable-2 + */ + function getDTokenAddr(address token, uint16 rateMode) + internal + view + returns(address dToken) + { + if (rateMode == 1) { + (, dToken, ) = aaveData.getReserveTokensAddresses(token); + } else { + (, , dToken) = aaveData.getReserveTokensAddresses(token); + } + } } diff --git a/contracts/optimism/connectors/aave/v3/interface.sol b/contracts/optimism/connectors/aave/v3/interface.sol index 81553143..6de08261 100644 --- a/contracts/optimism/connectors/aave/v3/interface.sol +++ b/contracts/optimism/connectors/aave/v3/interface.sol @@ -90,3 +90,7 @@ interface AaveAddressProviderRegistryInterface { interface ATokenInterface { function balanceOf(address _user) external view returns (uint256); } + +interface DTokenInterface { + function approveDelegation(address delegatee, uint256 amount) external; +} diff --git a/contracts/optimism/connectors/aave/v3/main.sol b/contracts/optimism/connectors/aave/v3/main.sol index e98ae77e..3a544184 100644 --- a/contracts/optimism/connectors/aave/v3/main.sol +++ b/contracts/optimism/connectors/aave/v3/main.sol @@ -10,7 +10,7 @@ import { TokenInterface } from "../../../common/interfaces.sol"; import { Stores } from "../../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; -import { AaveInterface } from "./interface.sol"; +import { AaveInterface, DTokenInterface } from "./interface.sol"; abstract contract AaveResolver is Events, Helpers { /** @@ -63,6 +63,56 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, getId, setId); } + /** + * @dev Deposit ETH/ERC20_Token. + * @notice Deposit a token to Aave v3 for lending / collaterization. + * @param token The address of the token to deposit.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. + */ + function depositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + if (isEth) { + _amt = _amt == uint256(-1) ? address(this).balance : _amt; + convertEthToWeth(isEth, tokenContract, _amt); + } else { + _amt = _amt == uint256(-1) + ? tokenContract.balanceOf(address(this)) + : _amt; + } + + approve(tokenContract, address(aave), _amt); + + aave.supply(_token, _amt, address(this), referralCode); + + if (getCollateralBalance(_token) > 0 && getIsColl(token)) { + aave.setUserUseReserveAsCollateral(_token, false); + } + + setUint(setId, _amt); + + _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, getId, setId); + } + /** * @dev Withdraw ETH/ERC20_Token. * @notice Withdraw deposited token from Aave v3 @@ -139,6 +189,44 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Borrow ETH/ERC20_Token on behalf of a user. + * @notice Borrow a token using Aave v3 on behalf of a user + * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to borrow. + * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param onBehalfOf The user who will incur the debt + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens borrowed. + */ + function borrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); + convertEthToWeth(isEth, TokenInterface(_token), _amt); + + setUint(setId, _amt); + + _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + } + /** * @dev Payback borrowed ETH/ERC20_Token. * @notice Payback debt owed. @@ -316,6 +404,32 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogSetUserEMode(uint8)"; _eventParam = abi.encode(categoryId); } + + /** + * @dev Approve Delegation + * @notice Gives approval to delegate debt tokens + * @param token The address of token + * @param rateMode The type of borrow debt + * @param delegateTo The address to whom the user is delegating + * @param amount The amount + */ + function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + address _dToken = getDTokenAddr(_token, rateMode); + DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + + _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; + _eventParam = abi.encode(token, rateMode, delegateTo, amount); + + } } contract ConnectV2AaveV3Optimism is AaveResolver { From a1169c871d35b60909216c2ded1359e5099cebca Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 02:44:25 +0400 Subject: [PATCH 04/33] Aave v3 updates on Fantom --- .../fantom/connectors/aave/v3/events.sol | 6 + .../fantom/connectors/aave/v3/helpers.sol | 17 +++ .../fantom/connectors/aave/v3/interface.sol | 4 + contracts/fantom/connectors/aave/v3/main.sol | 116 +++++++++++++++++- 4 files changed, 142 insertions(+), 1 deletion(-) diff --git a/contracts/fantom/connectors/aave/v3/events.sol b/contracts/fantom/connectors/aave/v3/events.sol index b29b4425..3b2513dd 100644 --- a/contracts/fantom/connectors/aave/v3/events.sol +++ b/contracts/fantom/connectors/aave/v3/events.sol @@ -32,4 +32,10 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); + event LogApproveDelegation( + address token, + uint16 debtType, + address delegateTo, + uint256 amount + ); } diff --git a/contracts/fantom/connectors/aave/v3/helpers.sol b/contracts/fantom/connectors/aave/v3/helpers.sol index 537db40a..527e08a7 100644 --- a/contracts/fantom/connectors/aave/v3/helpers.sol +++ b/contracts/fantom/connectors/aave/v3/helpers.sol @@ -64,4 +64,21 @@ abstract contract Helpers is DSMath, Basic { address(this) ); } + + /** + * @dev Get debt token address for an asset + * @param token token address of the asset + * @param rateMode Debt type: stable-1, variable-2 + */ + function getDTokenAddr(address token, uint16 rateMode) + internal + view + returns(address dToken) + { + if (rateMode == 1) { + (, dToken, ) = aaveData.getReserveTokensAddresses(token); + } else { + (, , dToken) = aaveData.getReserveTokensAddresses(token); + } + } } diff --git a/contracts/fantom/connectors/aave/v3/interface.sol b/contracts/fantom/connectors/aave/v3/interface.sol index 81553143..6de08261 100644 --- a/contracts/fantom/connectors/aave/v3/interface.sol +++ b/contracts/fantom/connectors/aave/v3/interface.sol @@ -90,3 +90,7 @@ interface AaveAddressProviderRegistryInterface { interface ATokenInterface { function balanceOf(address _user) external view returns (uint256); } + +interface DTokenInterface { + function approveDelegation(address delegatee, uint256 amount) external; +} diff --git a/contracts/fantom/connectors/aave/v3/main.sol b/contracts/fantom/connectors/aave/v3/main.sol index 75f1a9b6..34aeb4cd 100644 --- a/contracts/fantom/connectors/aave/v3/main.sol +++ b/contracts/fantom/connectors/aave/v3/main.sol @@ -10,7 +10,7 @@ import { TokenInterface } from "../../../common/interfaces.sol"; import { Stores } from "../../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; -import { AaveInterface } from "./interface.sol"; +import { AaveInterface, DTokenInterface } from "./interface.sol"; abstract contract AaveResolver is Events, Helpers { /** @@ -63,6 +63,56 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, getId, setId); } + /** + * @dev Deposit Ftm/ERC20_Token. + * @notice Deposit a token to Aave v3 for lending / collaterization. + * @param token The address of the token to deposit.(For FTM: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. + */ + function depositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isFTM = token == ftmAddr; + address _token = isFTM ? wftmAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + if (isFTM) { + _amt = _amt == uint256(-1) ? address(this).balance : _amt; + convertFtmToWftm(isFTM, tokenContract, _amt); + } else { + _amt = _amt == uint256(-1) + ? tokenContract.balanceOf(address(this)) + : _amt; + } + + approve(tokenContract, address(aave), _amt); + + aave.supply(_token, _amt, address(this), referralCode); + + if (getCollateralBalance(_token) > 0 && getIsColl(token)) { + aave.setUserUseReserveAsCollateral(_token, false); + } + + setUint(setId, _amt); + + _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, getId, setId); + } + /** * @dev Withdraw ftm/ERC20_Token. * @notice Withdraw deposited token from Aave v3 @@ -139,6 +189,44 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Borrow Ftm/ERC20_Token on behalf of a user. + * @notice Borrow a token using Aave v3 on behalf of a user + * @param token The address of the token to borrow.(For FTM: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to borrow. + * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param onBehalfOf The user who will incur the debt + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens borrowed. + */ + function borrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isFTM = token == ftmAddr; + address _token = isFTM ? wftmAddr : token; + + aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); + convertFtmToWftm(isFTM, TokenInterface(_token), _amt); + + setUint(setId, _amt); + + _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + } + /** * @dev Payback borrowed ftm/ERC20_Token. * @notice Payback debt owed. @@ -316,6 +404,32 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogSetUserEMode(uint8)"; _eventParam = abi.encode(categoryId); } + + /** + * @dev Approve Delegation + * @notice Gives approval to delegate debt tokens + * @param token The address of token + * @param rateMode The type of borrow debt + * @param delegateTo The address to whom the user is delegating + * @param amount The amount + */ + function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + + bool isFTM = token == ftmAddr; + address _token = isFTM ? wftmAddr : token; + + address _dToken = getDTokenAddr(_token, rateMode); + DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + + _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; + _eventParam = abi.encode(token, rateMode, delegateTo, amount); + + } } contract ConnectV2AaveV3Fantom is AaveResolver { From 721a60f51d5cb32c72c4b5bbb28de4579265a7d4 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 02:49:33 +0400 Subject: [PATCH 05/33] Aave v3 updates on Avalanche --- .../avalanche/connectors/aave/v3/events.sol | 6 + .../avalanche/connectors/aave/v3/helpers.sol | 17 +++ .../connectors/aave/v3/interface.sol | 4 + .../avalanche/connectors/aave/v3/main.sol | 116 +++++++++++++++++- 4 files changed, 142 insertions(+), 1 deletion(-) diff --git a/contracts/avalanche/connectors/aave/v3/events.sol b/contracts/avalanche/connectors/aave/v3/events.sol index b29b4425..3b2513dd 100644 --- a/contracts/avalanche/connectors/aave/v3/events.sol +++ b/contracts/avalanche/connectors/aave/v3/events.sol @@ -32,4 +32,10 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); + event LogApproveDelegation( + address token, + uint16 debtType, + address delegateTo, + uint256 amount + ); } diff --git a/contracts/avalanche/connectors/aave/v3/helpers.sol b/contracts/avalanche/connectors/aave/v3/helpers.sol index d4c06017..96a57412 100644 --- a/contracts/avalanche/connectors/aave/v3/helpers.sol +++ b/contracts/avalanche/connectors/aave/v3/helpers.sol @@ -64,4 +64,21 @@ abstract contract Helpers is DSMath, Basic { address(this) ); } + + /** + * @dev Get debt token address for an asset + * @param token token address of the asset + * @param rateMode Debt type: stable-1, variable-2 + */ + function getDTokenAddr(address token, uint16 rateMode) + internal + view + returns(address dToken) + { + if (rateMode == 1) { + (, dToken, ) = aaveData.getReserveTokensAddresses(token); + } else { + (, , dToken) = aaveData.getReserveTokensAddresses(token); + } + } } diff --git a/contracts/avalanche/connectors/aave/v3/interface.sol b/contracts/avalanche/connectors/aave/v3/interface.sol index 81553143..6de08261 100644 --- a/contracts/avalanche/connectors/aave/v3/interface.sol +++ b/contracts/avalanche/connectors/aave/v3/interface.sol @@ -90,3 +90,7 @@ interface AaveAddressProviderRegistryInterface { interface ATokenInterface { function balanceOf(address _user) external view returns (uint256); } + +interface DTokenInterface { + function approveDelegation(address delegatee, uint256 amount) external; +} diff --git a/contracts/avalanche/connectors/aave/v3/main.sol b/contracts/avalanche/connectors/aave/v3/main.sol index 611d12c6..5eb55867 100644 --- a/contracts/avalanche/connectors/aave/v3/main.sol +++ b/contracts/avalanche/connectors/aave/v3/main.sol @@ -10,7 +10,7 @@ import { TokenInterface } from "../../../common/interfaces.sol"; import { Stores } from "../../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; -import { AaveInterface } from "./interface.sol"; +import { AaveInterface, DTokenInterface } from "./interface.sol"; abstract contract AaveResolver is Events, Helpers { /** @@ -63,6 +63,56 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, getId, setId); } + /** + * @dev Deposit avax/ERC20_Token. + * @notice Deposit a token to Aave v3 for lending / collaterization. + * @param token The address of the token to deposit.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. + */ + function depositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isAVAX = token == avaxAddr; + address _token = isAVAX ? wavaxAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + if (isAVAX) { + _amt = _amt == uint256(-1) ? address(this).balance : _amt; + convertAvaxToWavax(isAVAX, tokenContract, _amt); + } else { + _amt = _amt == uint256(-1) + ? tokenContract.balanceOf(address(this)) + : _amt; + } + + approve(tokenContract, address(aave), _amt); + + aave.supply(_token, _amt, address(this), referralCode); + + if (getCollateralBalance(_token) > 0 && getIsColl(token)) { + aave.setUserUseReserveAsCollateral(_token, false); + } + + setUint(setId, _amt); + + _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, getId, setId); + } + /** * @dev Withdraw avax/ERC20_Token. * @notice Withdraw deposited token from Aave v3 @@ -139,6 +189,44 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Borrow avax/ERC20_Token on behalf of a user. + * @notice Borrow a token using Aave v3 on behalf of a user + * @param token The address of the token to borrow.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to borrow. + * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param onBehalfOf The user who will incur the debt + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens borrowed. + */ + function borrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isAVAX = token == avaxAddr; + address _token = isAVAX ? wavaxAddr : token; + + aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); + convertAvaxToWavax(isAVAX, TokenInterface(_token), _amt); + + setUint(setId, _amt); + + _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + } + /** * @dev Payback borrowed avax/ERC20_Token. * @notice Payback debt owed. @@ -315,6 +403,32 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogSetUserEMode(uint8)"; _eventParam = abi.encode(categoryId); } + + /** + * @dev Approve Delegation + * @notice Gives approval to delegate debt tokens + * @param token The address of token + * @param rateMode The type of borrow debt + * @param delegateTo The address to whom the user is delegating + * @param amount The amount + */ + function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + + bool isAVAX = token == avaxAddr; + address _token = isAVAX ? wavaxAddr : token; + + address _dToken = getDTokenAddr(_token, rateMode); + DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + + _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; + _eventParam = abi.encode(token, rateMode, delegateTo, amount); + + } } contract ConnectV2AaveV3Avalanche is AaveResolver { From e31d39afb06ab1eb875991e482cec0fe29bab9f7 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 02:54:23 +0400 Subject: [PATCH 06/33] Aave v3 updates on Arbitrum --- .../arbitrum/connectors/aave/v3/events.sol | 6 + .../arbitrum/connectors/aave/v3/helpers.sol | 17 +++ .../arbitrum/connectors/aave/v3/interface.sol | 4 + .../arbitrum/connectors/aave/v3/main.sol | 116 +++++++++++++++++- 4 files changed, 142 insertions(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/events.sol b/contracts/arbitrum/connectors/aave/v3/events.sol index b29b4425..3b2513dd 100644 --- a/contracts/arbitrum/connectors/aave/v3/events.sol +++ b/contracts/arbitrum/connectors/aave/v3/events.sol @@ -32,4 +32,10 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); + event LogApproveDelegation( + address token, + uint16 debtType, + address delegateTo, + uint256 amount + ); } diff --git a/contracts/arbitrum/connectors/aave/v3/helpers.sol b/contracts/arbitrum/connectors/aave/v3/helpers.sol index 2d9243d3..093f6da6 100644 --- a/contracts/arbitrum/connectors/aave/v3/helpers.sol +++ b/contracts/arbitrum/connectors/aave/v3/helpers.sol @@ -64,4 +64,21 @@ abstract contract Helpers is DSMath, Basic { address(this) ); } + + /** + * @dev Get debt token address for an asset + * @param token token address of the asset + * @param rateMode Debt type: stable-1, variable-2 + */ + function getDTokenAddr(address token, uint16 rateMode) + internal + view + returns(address dToken) + { + if (rateMode == 1) { + (, dToken, ) = aaveData.getReserveTokensAddresses(token); + } else { + (, , dToken) = aaveData.getReserveTokensAddresses(token); + } + } } diff --git a/contracts/arbitrum/connectors/aave/v3/interface.sol b/contracts/arbitrum/connectors/aave/v3/interface.sol index 81553143..6de08261 100644 --- a/contracts/arbitrum/connectors/aave/v3/interface.sol +++ b/contracts/arbitrum/connectors/aave/v3/interface.sol @@ -90,3 +90,7 @@ interface AaveAddressProviderRegistryInterface { interface ATokenInterface { function balanceOf(address _user) external view returns (uint256); } + +interface DTokenInterface { + function approveDelegation(address delegatee, uint256 amount) external; +} diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index 150cebf0..5e508340 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -10,7 +10,7 @@ import { TokenInterface } from "../../../common/interfaces.sol"; import { Stores } from "../../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; -import { AaveInterface } from "./interface.sol"; +import { AaveInterface, DTokenInterface } from "./interface.sol"; abstract contract AaveResolver is Events, Helpers { /** @@ -63,6 +63,56 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, getId, setId); } + /** + * @dev Deposit ETH/ERC20_Token. + * @notice Deposit a token to Aave v3 for lending / collaterization. + * @param token The address of the token to deposit.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. + */ + function depositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + if (isEth) { + _amt = _amt == uint256(-1) ? address(this).balance : _amt; + convertEthToWeth(isEth, tokenContract, _amt); + } else { + _amt = _amt == uint256(-1) + ? tokenContract.balanceOf(address(this)) + : _amt; + } + + approve(tokenContract, address(aave), _amt); + + aave.supply(_token, _amt, address(this), referralCode); + + if (getCollateralBalance(_token) > 0 && getIsColl(token)) { + aave.setUserUseReserveAsCollateral(_token, false); + } + + setUint(setId, _amt); + + _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, getId, setId); + } + /** * @dev Withdraw ETH/ERC20_Token. * @notice Withdraw deposited token from Aave v2 @@ -139,6 +189,44 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Borrow ETH/ERC20_Token on behalf of a user. + * @notice Borrow a token using Aave v3 on behalf of a user + * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to borrow. + * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param onBehalfOf The user who will incur the debt + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens borrowed. + */ + function borrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); + convertEthToWeth(isEth, TokenInterface(_token), _amt); + + setUint(setId, _amt); + + _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + } + /** * @dev Payback borrowed ETH/ERC20_Token. * @notice Payback debt owed. @@ -316,6 +404,32 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogSetUserEMode(uint8)"; _eventParam = abi.encode(categoryId); } + + /** + * @dev Approve Delegation + * @notice Gives approval to delegate debt tokens + * @param token The address of token + * @param rateMode The type of borrow debt + * @param delegateTo The address to whom the user is delegating + * @param amount The amount + */ + function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + address _dToken = getDTokenAddr(_token, rateMode); + DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + + _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; + _eventParam = abi.encode(token, rateMode, delegateTo, amount); + + } } contract ConnectV2AaveV3Arbitrum is AaveResolver { From 22efee297b9f7d4a8ce1543f98cf49771db64b20 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 03:02:47 +0400 Subject: [PATCH 07/33] Aave v3 updated on Mainnet --- .../mainnet/connectors/aave/v3/events.sol | 6 + .../mainnet/connectors/aave/v3/helpers.sol | 17 +++ .../mainnet/connectors/aave/v3/interface.sol | 4 + contracts/mainnet/connectors/aave/v3/main.sol | 116 +++++++++++++++++- 4 files changed, 142 insertions(+), 1 deletion(-) diff --git a/contracts/mainnet/connectors/aave/v3/events.sol b/contracts/mainnet/connectors/aave/v3/events.sol index 09c88ea7..8255058f 100644 --- a/contracts/mainnet/connectors/aave/v3/events.sol +++ b/contracts/mainnet/connectors/aave/v3/events.sol @@ -31,4 +31,10 @@ contract Events { event LogEnableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); + event LogApproveDelegation( + address token, + uint16 debtType, + address delegateTo, + uint256 amount + ); } diff --git a/contracts/mainnet/connectors/aave/v3/helpers.sol b/contracts/mainnet/connectors/aave/v3/helpers.sol index e14e0fbe..c25b492c 100644 --- a/contracts/mainnet/connectors/aave/v3/helpers.sol +++ b/contracts/mainnet/connectors/aave/v3/helpers.sol @@ -64,4 +64,21 @@ abstract contract Helpers is DSMath, Basic { address(this) ); } + + /** + * @dev Get debt token address for an asset + * @param token token address of the asset + * @param rateMode Debt type: stable-1, variable-2 + */ + function getDTokenAddr(address token, uint16 rateMode) + internal + view + returns(address dToken) + { + if (rateMode == 1) { + (, dToken, ) = aaveData.getReserveTokensAddresses(token); + } else { + (, , dToken) = aaveData.getReserveTokensAddresses(token); + } + } } diff --git a/contracts/mainnet/connectors/aave/v3/interface.sol b/contracts/mainnet/connectors/aave/v3/interface.sol index 81553143..6de08261 100644 --- a/contracts/mainnet/connectors/aave/v3/interface.sol +++ b/contracts/mainnet/connectors/aave/v3/interface.sol @@ -90,3 +90,7 @@ interface AaveAddressProviderRegistryInterface { interface ATokenInterface { function balanceOf(address _user) external view returns (uint256); } + +interface DTokenInterface { + function approveDelegation(address delegatee, uint256 amount) external; +} diff --git a/contracts/mainnet/connectors/aave/v3/main.sol b/contracts/mainnet/connectors/aave/v3/main.sol index 2ac93267..a452e631 100644 --- a/contracts/mainnet/connectors/aave/v3/main.sol +++ b/contracts/mainnet/connectors/aave/v3/main.sol @@ -10,7 +10,7 @@ import { TokenInterface } from "../../../common/interfaces.sol"; import { Stores } from "../../../common/stores.sol"; import { Helpers } from "./helpers.sol"; import { Events } from "./events.sol"; -import { AaveInterface } from "./interface.sol"; +import { AaveInterface, DTokenInterface } from "./interface.sol"; abstract contract AaveResolver is Events, Helpers { /** @@ -63,6 +63,56 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, getId, setId); } + /** + * @dev Deposit ETH/ERC20_Token. + * @notice Deposit a token to Aave v3 for lending / collaterization. + * @param token The address of the token to deposit.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. + */ + function depositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + if (isEth) { + _amt = _amt == uint256(-1) ? address(this).balance : _amt; + convertEthToWeth(isEth, tokenContract, _amt); + } else { + _amt = _amt == uint256(-1) + ? tokenContract.balanceOf(address(this)) + : _amt; + } + + approve(tokenContract, address(aave), _amt); + + aave.supply(_token, _amt, address(this), referralCode); + + if (getCollateralBalance(_token) > 0 && getIsColl(token)) { + aave.setUserUseReserveAsCollateral(_token, false); + } + + setUint(setId, _amt); + + _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, getId, setId); + } + /** * @dev Withdraw ETH/ERC20_Token. * @notice Withdraw deposited token from Aave v3 @@ -139,6 +189,44 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Borrow ETH/ERC20_Token on behalf of a user. + * @notice Borrow a token using Aave v3 on behalf of a user + * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to borrow. + * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param onBehalfOf The user who will incur the debt + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens borrowed. + */ + function borrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); + convertEthToWeth(isEth, TokenInterface(_token), _amt); + + setUint(setId, _amt); + + _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + } + /** * @dev Payback borrowed ETH/ERC20_Token. * @notice Payback debt owed. @@ -291,6 +379,32 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogSetUserEMode(uint8)"; _eventParam = abi.encode(categoryId); } + + /** + * @dev Approve Delegation + * @notice Gives approval to delegate debt tokens + * @param token The address of token + * @param rateMode The type of borrow debt + * @param delegateTo The address to whom the user is delegating + * @param amount The amount + */ + function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + address _dToken = getDTokenAddr(_token, rateMode); + DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + + _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; + _eventParam = abi.encode(token, rateMode, delegateTo, amount); + + } } contract ConnectV2AaveV3 is AaveResolver { From fc24288d5973cfdd525860d7fdb86ad704ed4838 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <47134275+shriyatyagii@users.noreply.github.com> Date: Wed, 27 Apr 2022 17:35:17 +0400 Subject: [PATCH 08/33] updated rateMode Co-authored-by: Thrilok kumar <thrilok2000@gmail.com> --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index 5e508340..b21d6cb7 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -413,7 +413,7 @@ abstract contract AaveResolver is Events, Helpers { * @param delegateTo The address to whom the user is delegating * @param amount The amount */ - function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + function approveDelegation(address token, , uint256 amount, uint256 rateMode, address delegateTo) external payable returns (string memory _eventName, bytes memory _eventParam) From 3a8a2ba6bca73958ca586f425e35bd6949704455 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <47134275+shriyatyagii@users.noreply.github.com> Date: Wed, 27 Apr 2022 17:37:24 +0400 Subject: [PATCH 09/33] LogBorrowOnBehalfOf event created Co-authored-by: Thrilok kumar <thrilok2000@gmail.com> --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index b21d6cb7..8503f6db 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -223,7 +223,7 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; + _eventName = "LogBorrowOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } From d7b7c4c2e8c146ce44dc1cfbdcb284bdc6fc349e Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <47134275+shriyatyagii@users.noreply.github.com> Date: Wed, 27 Apr 2022 17:37:39 +0400 Subject: [PATCH 10/33] LogDepositWithoutCollateral event created Co-authored-by: Thrilok kumar <thrilok2000@gmail.com> --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index 8503f6db..fe040eee 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -109,7 +109,7 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventName = "LogDepositWithoutCollateral(address,uint256,uint256,uint256)"; _eventParam = abi.encode(token, _amt, getId, setId); } From 99376e63814831f14cc22e213cb0b88b086e4dca Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 18:01:09 +0400 Subject: [PATCH 11/33] changes updated- Avalanche --- .../avalanche/connectors/aave/v3/events.sol | 20 +++++++++++-- .../avalanche/connectors/aave/v3/helpers.sol | 2 +- .../avalanche/connectors/aave/v3/main.sol | 30 +++++++++++++------ 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/contracts/avalanche/connectors/aave/v3/events.sol b/contracts/avalanche/connectors/aave/v3/events.sol index 3b2513dd..6c0f0451 100644 --- a/contracts/avalanche/connectors/aave/v3/events.sol +++ b/contracts/avalanche/connectors/aave/v3/events.sol @@ -34,8 +34,24 @@ contract Events { event LogSetUserEMode(uint8 categoryId); event LogApproveDelegation( address token, - uint16 debtType, + uint256 amount, + uint16 rateMode, address delegateTo, - uint256 amount + uint256 getId, + uint256 setId + ); + event LogDepositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ); + event LogBorrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId ); } diff --git a/contracts/avalanche/connectors/aave/v3/helpers.sol b/contracts/avalanche/connectors/aave/v3/helpers.sol index 96a57412..0fa43646 100644 --- a/contracts/avalanche/connectors/aave/v3/helpers.sol +++ b/contracts/avalanche/connectors/aave/v3/helpers.sol @@ -70,7 +70,7 @@ abstract contract Helpers is DSMath, Basic { * @param token token address of the asset * @param rateMode Debt type: stable-1, variable-2 */ - function getDTokenAddr(address token, uint16 rateMode) + function getDTokenAddr(address token, uint256 rateMode) internal view returns(address dToken) diff --git a/contracts/avalanche/connectors/aave/v3/main.sol b/contracts/avalanche/connectors/aave/v3/main.sol index 5eb55867..b28873ba 100644 --- a/contracts/avalanche/connectors/aave/v3/main.sol +++ b/contracts/avalanche/connectors/aave/v3/main.sol @@ -109,7 +109,7 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventName = "LogDepositWithoutCollateral(address,uint256,uint256,uint256)"; _eventParam = abi.encode(token, _amt, getId, setId); } @@ -223,8 +223,8 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; - _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + _eventName = "LogBorrowOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); } /** @@ -408,29 +408,41 @@ abstract contract AaveResolver is Events, Helpers { * @dev Approve Delegation * @notice Gives approval to delegate debt tokens * @param token The address of token + * @param amount The amount * @param rateMode The type of borrow debt * @param delegateTo The address to whom the user is delegating - * @param amount The amount + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. */ - function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + function approveDelegation( + address token, + uint256 amount, + uint256 rateMode, + address delegateTo, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + uint256 _amt = getUint(getId, amount); bool isAVAX = token == avaxAddr; address _token = isAVAX ? wavaxAddr : token; address _dToken = getDTokenAddr(_token, rateMode); - DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + DTokenInterface(_dToken).approveDelegation(delegateTo, _amt); - _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; - _eventParam = abi.encode(token, rateMode, delegateTo, amount); + setUint(setId, _amt); + + _eventName = "LogApproveDelegation(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); } } contract ConnectV2AaveV3Avalanche is AaveResolver { - string public constant name = "AaveV3-v1.1"; + string public constant name = "AaveV3-v1.2"; } From 062029d9b4cbd5665c38a031f242763bc7cc1e25 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 18:11:52 +0400 Subject: [PATCH 12/33] updated changes-polygon --- .../polygon/connectors/aave/v3/events.sol | 22 +++++++++++++-- .../polygon/connectors/aave/v3/helpers.sol | 2 +- contracts/polygon/connectors/aave/v3/main.sol | 28 +++++++++++++------ 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/contracts/polygon/connectors/aave/v3/events.sol b/contracts/polygon/connectors/aave/v3/events.sol index 3b2513dd..32926b9a 100644 --- a/contracts/polygon/connectors/aave/v3/events.sol +++ b/contracts/polygon/connectors/aave/v3/events.sol @@ -32,10 +32,26 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); - event LogApproveDelegation( + event LogDelegateBorrow( address token, - uint16 debtType, + uint256 amount, + uint16 rateMode, address delegateTo, - uint256 amount + uint256 getId, + uint256 setId + ); + event LogDepositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ); + event LogBorrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId ); } diff --git a/contracts/polygon/connectors/aave/v3/helpers.sol b/contracts/polygon/connectors/aave/v3/helpers.sol index 01fc3bcb..4b2d239b 100644 --- a/contracts/polygon/connectors/aave/v3/helpers.sol +++ b/contracts/polygon/connectors/aave/v3/helpers.sol @@ -70,7 +70,7 @@ abstract contract Helpers is DSMath, Basic { * @param token token address of the asset * @param rateMode Debt type: stable-1, variable-2 */ - function getDTokenAddr(address token, uint16 rateMode) + function getDTokenAddr(address token, uint256 rateMode) internal view returns(address dToken) diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index 30a9f8ce..35d20767 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -109,7 +109,7 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventName = "LogDepositWithoutCollateral(address,uint256,uint256,uint256)"; _eventParam = abi.encode(token, _amt, getId, setId); } @@ -223,8 +223,8 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; - _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + _eventName = "LogBorrowOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); } /** @@ -410,25 +410,37 @@ abstract contract AaveResolver is Events, Helpers { * @dev Approve Delegation * @notice Gives approval to delegate debt tokens * @param token The address of token + * @param amount The amount * @param rateMode The type of borrow debt * @param delegateTo The address to whom the user is delegating - * @param amount The amount + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. */ - function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + function delegateBorrow( + address token, + uint256 amount, + uint256 rateMode, + address delegateTo, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + uint256 _amt = getUint(getId, amount); bool isMatic = token == maticAddr; address _token = isMatic ? wmaticAddr : token; address _dToken = getDTokenAddr(_token, rateMode); - DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + DTokenInterface(_dToken).approveDelegation(delegateTo, _amt); - _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; - _eventParam = abi.encode(token, rateMode, delegateTo, amount); + setUint(setId, _amt); + + _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); } } From 8bbae5a1e1537acf9a1f9c4e69ad0da6ee9ab0d1 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 18:13:16 +0400 Subject: [PATCH 13/33] Updated changes- Optimism --- .../optimism/connectors/aave/v3/events.sol | 22 ++++++++++++-- .../optimism/connectors/aave/v3/helpers.sol | 2 +- .../optimism/connectors/aave/v3/main.sol | 29 ++++++++++++++----- contracts/polygon/connectors/aave/v3/main.sol | 2 +- 4 files changed, 42 insertions(+), 13 deletions(-) diff --git a/contracts/optimism/connectors/aave/v3/events.sol b/contracts/optimism/connectors/aave/v3/events.sol index 3b2513dd..32926b9a 100644 --- a/contracts/optimism/connectors/aave/v3/events.sol +++ b/contracts/optimism/connectors/aave/v3/events.sol @@ -32,10 +32,26 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); - event LogApproveDelegation( + event LogDelegateBorrow( address token, - uint16 debtType, + uint256 amount, + uint16 rateMode, address delegateTo, - uint256 amount + uint256 getId, + uint256 setId + ); + event LogDepositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ); + event LogBorrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId ); } diff --git a/contracts/optimism/connectors/aave/v3/helpers.sol b/contracts/optimism/connectors/aave/v3/helpers.sol index d7f8f0a2..5e66f60e 100644 --- a/contracts/optimism/connectors/aave/v3/helpers.sol +++ b/contracts/optimism/connectors/aave/v3/helpers.sol @@ -70,7 +70,7 @@ abstract contract Helpers is DSMath, Basic { * @param token token address of the asset * @param rateMode Debt type: stable-1, variable-2 */ - function getDTokenAddr(address token, uint16 rateMode) + function getDTokenAddr(address token, uint256 rateMode) internal view returns(address dToken) diff --git a/contracts/optimism/connectors/aave/v3/main.sol b/contracts/optimism/connectors/aave/v3/main.sol index 3a544184..772d92c6 100644 --- a/contracts/optimism/connectors/aave/v3/main.sol +++ b/contracts/optimism/connectors/aave/v3/main.sol @@ -109,7 +109,7 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventName = "LogDepositWithoutCollateral(address,uint256,uint256,uint256)"; _eventParam = abi.encode(token, _amt, getId, setId); } @@ -223,8 +223,8 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; - _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + _eventName = "LogBorrowOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); } /** @@ -409,25 +409,38 @@ abstract contract AaveResolver is Events, Helpers { * @dev Approve Delegation * @notice Gives approval to delegate debt tokens * @param token The address of token + * @param amount The amount * @param rateMode The type of borrow debt * @param delegateTo The address to whom the user is delegating - * @param amount The amount + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. */ - function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + function delegateBorrow( + address token, + uint256 amount, + uint256 rateMode, + address delegateTo, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + uint256 _amt = getUint(getId, amount); + bool isEth = token == ethAddr; address _token = isEth ? wethAddr : token; address _dToken = getDTokenAddr(_token, rateMode); - DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + DTokenInterface(_dToken).approveDelegation(delegateTo, _amt); - _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; - _eventParam = abi.encode(token, rateMode, delegateTo, amount); + setUint(setId, _amt); + + _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); } } diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index 35d20767..2a166a7d 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -446,5 +446,5 @@ abstract contract AaveResolver is Events, Helpers { } contract ConnectV2AaveV3Polygon is AaveResolver { - string public constant name = "AaveV3-v1.1"; + string public constant name = "AaveV3-v1.2"; } From 484ff2ef33451668937346ac1d55c33ae9afb500 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 18:15:32 +0400 Subject: [PATCH 14/33] updated changes- Mainnet --- .../mainnet/connectors/aave/v3/events.sol | 22 +++++++++++++-- .../mainnet/connectors/aave/v3/helpers.sol | 2 +- contracts/mainnet/connectors/aave/v3/main.sol | 28 +++++++++++++------ 3 files changed, 40 insertions(+), 12 deletions(-) diff --git a/contracts/mainnet/connectors/aave/v3/events.sol b/contracts/mainnet/connectors/aave/v3/events.sol index 8255058f..d3b6d186 100644 --- a/contracts/mainnet/connectors/aave/v3/events.sol +++ b/contracts/mainnet/connectors/aave/v3/events.sol @@ -31,10 +31,26 @@ contract Events { event LogEnableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); - event LogApproveDelegation( + event LogDelegateBorrow( address token, - uint16 debtType, + uint256 amount, + uint16 rateMode, address delegateTo, - uint256 amount + uint256 getId, + uint256 setId + ); + event LogDepositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ); + event LogBorrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId ); } diff --git a/contracts/mainnet/connectors/aave/v3/helpers.sol b/contracts/mainnet/connectors/aave/v3/helpers.sol index c25b492c..ed7f03a2 100644 --- a/contracts/mainnet/connectors/aave/v3/helpers.sol +++ b/contracts/mainnet/connectors/aave/v3/helpers.sol @@ -70,7 +70,7 @@ abstract contract Helpers is DSMath, Basic { * @param token token address of the asset * @param rateMode Debt type: stable-1, variable-2 */ - function getDTokenAddr(address token, uint16 rateMode) + function getDTokenAddr(address token, uint256 rateMode) internal view returns(address dToken) diff --git a/contracts/mainnet/connectors/aave/v3/main.sol b/contracts/mainnet/connectors/aave/v3/main.sol index a452e631..895a3619 100644 --- a/contracts/mainnet/connectors/aave/v3/main.sol +++ b/contracts/mainnet/connectors/aave/v3/main.sol @@ -109,7 +109,7 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventName = "LogDepositWithoutCollateral(address,uint256,uint256,uint256)"; _eventParam = abi.encode(token, _amt, getId, setId); } @@ -223,8 +223,8 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; - _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + _eventName = "LogBorrowOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); } /** @@ -384,25 +384,37 @@ abstract contract AaveResolver is Events, Helpers { * @dev Approve Delegation * @notice Gives approval to delegate debt tokens * @param token The address of token + * @param amount The amount * @param rateMode The type of borrow debt * @param delegateTo The address to whom the user is delegating - * @param amount The amount + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. */ - function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + function delegateBorrow( + address token, + uint256 amount, + uint256 rateMode, + address delegateTo, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + uint256 _amt = getUint(getId, amount); bool isEth = token == ethAddr; address _token = isEth ? wethAddr : token; address _dToken = getDTokenAddr(_token, rateMode); - DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + DTokenInterface(_dToken).approveDelegation(delegateTo, _amt); - _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; - _eventParam = abi.encode(token, rateMode, delegateTo, amount); + setUint(setId, _amt); + + _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); } } From 11ded62f6d51e421d56f1fe7862e1b28a56c0046 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 18:16:25 +0400 Subject: [PATCH 15/33] updated changes- Fantom --- .../fantom/connectors/aave/v3/events.sol | 22 ++++++++++++-- .../fantom/connectors/aave/v3/helpers.sol | 2 +- contracts/fantom/connectors/aave/v3/main.sol | 30 +++++++++++++------ 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/contracts/fantom/connectors/aave/v3/events.sol b/contracts/fantom/connectors/aave/v3/events.sol index 3b2513dd..32926b9a 100644 --- a/contracts/fantom/connectors/aave/v3/events.sol +++ b/contracts/fantom/connectors/aave/v3/events.sol @@ -32,10 +32,26 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); - event LogApproveDelegation( + event LogDelegateBorrow( address token, - uint16 debtType, + uint256 amount, + uint16 rateMode, address delegateTo, - uint256 amount + uint256 getId, + uint256 setId + ); + event LogDepositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ); + event LogBorrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId ); } diff --git a/contracts/fantom/connectors/aave/v3/helpers.sol b/contracts/fantom/connectors/aave/v3/helpers.sol index 527e08a7..a5a57c81 100644 --- a/contracts/fantom/connectors/aave/v3/helpers.sol +++ b/contracts/fantom/connectors/aave/v3/helpers.sol @@ -70,7 +70,7 @@ abstract contract Helpers is DSMath, Basic { * @param token token address of the asset * @param rateMode Debt type: stable-1, variable-2 */ - function getDTokenAddr(address token, uint16 rateMode) + function getDTokenAddr(address token, uint256 rateMode) internal view returns(address dToken) diff --git a/contracts/fantom/connectors/aave/v3/main.sol b/contracts/fantom/connectors/aave/v3/main.sol index 34aeb4cd..47284485 100644 --- a/contracts/fantom/connectors/aave/v3/main.sol +++ b/contracts/fantom/connectors/aave/v3/main.sol @@ -109,7 +109,7 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogDeposit(address,uint256,uint256,uint256)"; + _eventName = "LogDepositWithoutCollateral(address,uint256,uint256,uint256)"; _eventParam = abi.encode(token, _amt, getId, setId); } @@ -223,8 +223,8 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogBorrow(address,uint256,uint256,uint256,uint256)"; - _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + _eventName = "LogBorrowOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); } /** @@ -409,29 +409,41 @@ abstract contract AaveResolver is Events, Helpers { * @dev Approve Delegation * @notice Gives approval to delegate debt tokens * @param token The address of token + * @param amount The amount * @param rateMode The type of borrow debt * @param delegateTo The address to whom the user is delegating - * @param amount The amount + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. */ - function approveDelegation(address token, uint16 rateMode, address delegateTo, uint256 amount) + function delegateBorrow( + address token, + uint256 amount, + uint256 rateMode, + address delegateTo, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + uint256 _amt = getUint(getId, amount); bool isFTM = token == ftmAddr; address _token = isFTM ? wftmAddr : token; address _dToken = getDTokenAddr(_token, rateMode); - DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + DTokenInterface(_dToken).approveDelegation(delegateTo, _amt); - _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; - _eventParam = abi.encode(token, rateMode, delegateTo, amount); + setUint(setId, _amt); + + _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); } } contract ConnectV2AaveV3Fantom is AaveResolver { - string public constant name = "AaveV3-v1.1"; + string public constant name = "AaveV3-v1.2"; } From d5b096c9950ce3ab7af15a3ac77375016aefd363 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 18:18:18 +0400 Subject: [PATCH 16/33] updated changes- Arbitrum --- .../arbitrum/connectors/aave/v3/events.sol | 22 +++++++++++++--- .../arbitrum/connectors/aave/v3/helpers.sol | 2 +- .../arbitrum/connectors/aave/v3/main.sol | 26 ++++++++++++++----- 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/contracts/arbitrum/connectors/aave/v3/events.sol b/contracts/arbitrum/connectors/aave/v3/events.sol index 3b2513dd..32926b9a 100644 --- a/contracts/arbitrum/connectors/aave/v3/events.sol +++ b/contracts/arbitrum/connectors/aave/v3/events.sol @@ -32,10 +32,26 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); - event LogApproveDelegation( + event LogDelegateBorrow( address token, - uint16 debtType, + uint256 amount, + uint16 rateMode, address delegateTo, - uint256 amount + uint256 getId, + uint256 setId + ); + event LogDepositWithoutCollateral( + address token, + uint256 amt, + uint256 getId, + uint256 setId + ); + event LogBorrowOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId ); } diff --git a/contracts/arbitrum/connectors/aave/v3/helpers.sol b/contracts/arbitrum/connectors/aave/v3/helpers.sol index 093f6da6..f1cfb63b 100644 --- a/contracts/arbitrum/connectors/aave/v3/helpers.sol +++ b/contracts/arbitrum/connectors/aave/v3/helpers.sol @@ -70,7 +70,7 @@ abstract contract Helpers is DSMath, Basic { * @param token token address of the asset * @param rateMode Debt type: stable-1, variable-2 */ - function getDTokenAddr(address token, uint16 rateMode) + function getDTokenAddr(address token, uint256 rateMode) internal view returns(address dToken) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index fe040eee..926b4794 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -224,7 +224,7 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); _eventName = "LogBorrowOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; - _eventParam = abi.encode(token, _amt, rateMode, getId, setId); + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); } /** @@ -409,29 +409,41 @@ abstract contract AaveResolver is Events, Helpers { * @dev Approve Delegation * @notice Gives approval to delegate debt tokens * @param token The address of token + * @param amount The amount * @param rateMode The type of borrow debt * @param delegateTo The address to whom the user is delegating - * @param amount The amount + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens deposited. */ - function approveDelegation(address token, , uint256 amount, uint256 rateMode, address delegateTo) + function delegateBorrow( + address token, + uint256 amount, + uint256 rateMode, + address delegateTo, + uint256 getId, + uint256 setId + ) external payable returns (string memory _eventName, bytes memory _eventParam) { require(rateMode == 1 || rateMode == 2, "Invalid debt type"); + uint256 _amt = getUint(getId, amount); bool isEth = token == ethAddr; address _token = isEth ? wethAddr : token; address _dToken = getDTokenAddr(_token, rateMode); - DTokenInterface(_dToken).approveDelegation(delegateTo, amount); + DTokenInterface(_dToken).approveDelegation(delegateTo, _amt); - _eventName = "LogApproveDelegation(address,uint16,address,uint256)"; - _eventParam = abi.encode(token, rateMode, delegateTo, amount); + setUint(setId, _amt); + + _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); } } contract ConnectV2AaveV3Arbitrum is AaveResolver { - string public constant name = "AaveV3-v1.1"; + string public constant name = "AaveV3-v1.2"; } From b566e34cd3f2120ddb672e1cd7d8d183b53abc21 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Wed, 27 Apr 2022 18:24:52 +0400 Subject: [PATCH 17/33] rateMode updated --- contracts/arbitrum/connectors/aave/v3/events.sol | 2 +- contracts/arbitrum/connectors/aave/v3/main.sol | 1 - contracts/avalanche/connectors/aave/v3/events.sol | 4 ++-- contracts/avalanche/connectors/aave/v3/main.sol | 3 +-- contracts/fantom/connectors/aave/v3/events.sol | 2 +- contracts/mainnet/connectors/aave/v3/events.sol | 2 +- contracts/optimism/connectors/aave/v3/events.sol | 2 +- contracts/optimism/connectors/aave/v3/main.sol | 3 +-- contracts/polygon/connectors/aave/v3/events.sol | 2 +- contracts/polygon/connectors/aave/v3/main.sol | 1 - 10 files changed, 9 insertions(+), 13 deletions(-) diff --git a/contracts/arbitrum/connectors/aave/v3/events.sol b/contracts/arbitrum/connectors/aave/v3/events.sol index 32926b9a..800c7873 100644 --- a/contracts/arbitrum/connectors/aave/v3/events.sol +++ b/contracts/arbitrum/connectors/aave/v3/events.sol @@ -35,7 +35,7 @@ contract Events { event LogDelegateBorrow( address token, uint256 amount, - uint16 rateMode, + uint256 rateMode, address delegateTo, uint256 getId, uint256 setId diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index 926b4794..cc27988d 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -440,7 +440,6 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); - } } diff --git a/contracts/avalanche/connectors/aave/v3/events.sol b/contracts/avalanche/connectors/aave/v3/events.sol index 6c0f0451..800c7873 100644 --- a/contracts/avalanche/connectors/aave/v3/events.sol +++ b/contracts/avalanche/connectors/aave/v3/events.sol @@ -32,10 +32,10 @@ contract Events { event LogDisableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); event LogSetUserEMode(uint8 categoryId); - event LogApproveDelegation( + event LogDelegateBorrow( address token, uint256 amount, - uint16 rateMode, + uint256 rateMode, address delegateTo, uint256 getId, uint256 setId diff --git a/contracts/avalanche/connectors/aave/v3/main.sol b/contracts/avalanche/connectors/aave/v3/main.sol index b28873ba..1eff3505 100644 --- a/contracts/avalanche/connectors/aave/v3/main.sol +++ b/contracts/avalanche/connectors/aave/v3/main.sol @@ -437,9 +437,8 @@ abstract contract AaveResolver is Events, Helpers { setUint(setId, _amt); - _eventName = "LogApproveDelegation(address,uint256,uint256,address,uint256,uint256)"; + _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); - } } diff --git a/contracts/fantom/connectors/aave/v3/events.sol b/contracts/fantom/connectors/aave/v3/events.sol index 32926b9a..800c7873 100644 --- a/contracts/fantom/connectors/aave/v3/events.sol +++ b/contracts/fantom/connectors/aave/v3/events.sol @@ -35,7 +35,7 @@ contract Events { event LogDelegateBorrow( address token, uint256 amount, - uint16 rateMode, + uint256 rateMode, address delegateTo, uint256 getId, uint256 setId diff --git a/contracts/mainnet/connectors/aave/v3/events.sol b/contracts/mainnet/connectors/aave/v3/events.sol index d3b6d186..07888419 100644 --- a/contracts/mainnet/connectors/aave/v3/events.sol +++ b/contracts/mainnet/connectors/aave/v3/events.sol @@ -34,7 +34,7 @@ contract Events { event LogDelegateBorrow( address token, uint256 amount, - uint16 rateMode, + uint256 rateMode, address delegateTo, uint256 getId, uint256 setId diff --git a/contracts/optimism/connectors/aave/v3/events.sol b/contracts/optimism/connectors/aave/v3/events.sol index 32926b9a..800c7873 100644 --- a/contracts/optimism/connectors/aave/v3/events.sol +++ b/contracts/optimism/connectors/aave/v3/events.sol @@ -35,7 +35,7 @@ contract Events { event LogDelegateBorrow( address token, uint256 amount, - uint16 rateMode, + uint256 rateMode, address delegateTo, uint256 getId, uint256 setId diff --git a/contracts/optimism/connectors/aave/v3/main.sol b/contracts/optimism/connectors/aave/v3/main.sol index 772d92c6..f24914b0 100644 --- a/contracts/optimism/connectors/aave/v3/main.sol +++ b/contracts/optimism/connectors/aave/v3/main.sol @@ -441,10 +441,9 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); - } } contract ConnectV2AaveV3Optimism is AaveResolver { - string public constant name = "AaveV3-v1.1"; + string public constant name = "AaveV3-v1.2"; } diff --git a/contracts/polygon/connectors/aave/v3/events.sol b/contracts/polygon/connectors/aave/v3/events.sol index 32926b9a..800c7873 100644 --- a/contracts/polygon/connectors/aave/v3/events.sol +++ b/contracts/polygon/connectors/aave/v3/events.sol @@ -35,7 +35,7 @@ contract Events { event LogDelegateBorrow( address token, uint256 amount, - uint16 rateMode, + uint256 rateMode, address delegateTo, uint256 getId, uint256 setId diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index 2a166a7d..2d25f255 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -441,7 +441,6 @@ abstract contract AaveResolver is Events, Helpers { _eventName = "LogDelegateBorrow(address,uint256,uint256,address,uint256,uint256)"; _eventParam = abi.encode(token, _amt, rateMode, delegateTo, getId, setId); - } } From be1cf065c95de4f41a504b5910d7a3a6f8b6e062 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <47134275+shriyatyagii@users.noreply.github.com> Date: Thu, 28 Apr 2022 00:47:25 +0400 Subject: [PATCH 18/33] updated comments Co-authored-by: Thrilok kumar <thrilok2000@gmail.com> --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index cc27988d..83ab1141 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -64,7 +64,7 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Deposit ETH/ERC20_Token. + * @dev Deposit ETH/ERC20_Token without collateral * @notice Deposit a token to Aave v3 for lending / collaterization. * @param token The address of the token to deposit.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) From 3a6a864d8ff7e7a1641143ed2155ec29d21e8a8c Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <47134275+shriyatyagii@users.noreply.github.com> Date: Thu, 28 Apr 2022 00:47:37 +0400 Subject: [PATCH 19/33] updated comments Co-authored-by: Thrilok kumar <thrilok2000@gmail.com> --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index 83ab1141..be42dd55 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -65,7 +65,7 @@ abstract contract AaveResolver is Events, Helpers { /** * @dev Deposit ETH/ERC20_Token without collateral - * @notice Deposit a token to Aave v3 for lending / collaterization. + * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) * @param getId ID to retrieve amt. From 390bacaa01185016fb6daaf5361a27246568b679 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Thu, 28 Apr 2022 00:53:56 +0400 Subject: [PATCH 20/33] updated comments for all chains --- contracts/avalanche/connectors/aave/v3/main.sol | 4 ++-- contracts/fantom/connectors/aave/v3/main.sol | 4 ++-- contracts/mainnet/connectors/aave/v3/main.sol | 4 ++-- contracts/optimism/connectors/aave/v3/main.sol | 4 ++-- contracts/polygon/connectors/aave/v3/main.sol | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/contracts/avalanche/connectors/aave/v3/main.sol b/contracts/avalanche/connectors/aave/v3/main.sol index 1eff3505..675a04ac 100644 --- a/contracts/avalanche/connectors/aave/v3/main.sol +++ b/contracts/avalanche/connectors/aave/v3/main.sol @@ -64,8 +64,8 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Deposit avax/ERC20_Token. - * @notice Deposit a token to Aave v3 for lending / collaterization. + * @dev Deposit ETH/ERC20_Token without collateral + * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) * @param getId ID to retrieve amt. diff --git a/contracts/fantom/connectors/aave/v3/main.sol b/contracts/fantom/connectors/aave/v3/main.sol index 47284485..4d1b4500 100644 --- a/contracts/fantom/connectors/aave/v3/main.sol +++ b/contracts/fantom/connectors/aave/v3/main.sol @@ -64,8 +64,8 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Deposit Ftm/ERC20_Token. - * @notice Deposit a token to Aave v3 for lending / collaterization. + * @dev Deposit ETH/ERC20_Token without collateral + * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For FTM: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) * @param getId ID to retrieve amt. diff --git a/contracts/mainnet/connectors/aave/v3/main.sol b/contracts/mainnet/connectors/aave/v3/main.sol index 895a3619..cc46cb9b 100644 --- a/contracts/mainnet/connectors/aave/v3/main.sol +++ b/contracts/mainnet/connectors/aave/v3/main.sol @@ -64,8 +64,8 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Deposit ETH/ERC20_Token. - * @notice Deposit a token to Aave v3 for lending / collaterization. + * @dev Deposit ETH/ERC20_Token without collateral + * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) * @param getId ID to retrieve amt. diff --git a/contracts/optimism/connectors/aave/v3/main.sol b/contracts/optimism/connectors/aave/v3/main.sol index f24914b0..60f534e3 100644 --- a/contracts/optimism/connectors/aave/v3/main.sol +++ b/contracts/optimism/connectors/aave/v3/main.sol @@ -64,8 +64,8 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Deposit ETH/ERC20_Token. - * @notice Deposit a token to Aave v3 for lending / collaterization. + * @dev Deposit ETH/ERC20_Token without collateral + * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) * @param getId ID to retrieve amt. diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index 2d25f255..b05cd1b5 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -64,8 +64,8 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Deposit Matic/ERC20_Token. - * @notice Deposit a token to Aave v3 for lending / collaterization. + ** @dev Deposit ETH/ERC20_Token without collateral + * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For Matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) * @param getId ID to retrieve amt. From ba6f368b725083bf01cce1fa1ec8dfa1174bda1e Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Thu, 28 Apr 2022 21:34:54 +0400 Subject: [PATCH 21/33] minor updates --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- contracts/avalanche/connectors/aave/v3/main.sol | 4 ++-- contracts/fantom/connectors/aave/v3/main.sol | 4 ++-- contracts/mainnet/connectors/aave/v3/main.sol | 2 +- contracts/optimism/connectors/aave/v3/main.sol | 3 +-- contracts/polygon/connectors/aave/v3/main.sol | 2 +- 6 files changed, 8 insertions(+), 9 deletions(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index be42dd55..1bdda4a5 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -219,7 +219,7 @@ abstract contract AaveResolver is Events, Helpers { address _token = isEth ? wethAddr : token; aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); - convertEthToWeth(isEth, TokenInterface(_token), _amt); + convertWethToEth(isEth, TokenInterface(_token), _amt); setUint(setId, _amt); diff --git a/contracts/avalanche/connectors/aave/v3/main.sol b/contracts/avalanche/connectors/aave/v3/main.sol index 675a04ac..19087d5f 100644 --- a/contracts/avalanche/connectors/aave/v3/main.sol +++ b/contracts/avalanche/connectors/aave/v3/main.sol @@ -64,7 +64,7 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Deposit ETH/ERC20_Token without collateral + * @dev Deposit avax/ERC20_Token without collateral * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) @@ -219,7 +219,7 @@ abstract contract AaveResolver is Events, Helpers { address _token = isAVAX ? wavaxAddr : token; aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); - convertAvaxToWavax(isAVAX, TokenInterface(_token), _amt); + convertWavaxToAvax(isAVAX, TokenInterface(_token), _amt); setUint(setId, _amt); diff --git a/contracts/fantom/connectors/aave/v3/main.sol b/contracts/fantom/connectors/aave/v3/main.sol index 4d1b4500..ca0accf7 100644 --- a/contracts/fantom/connectors/aave/v3/main.sol +++ b/contracts/fantom/connectors/aave/v3/main.sol @@ -64,7 +64,7 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Deposit ETH/ERC20_Token without collateral + * @dev Deposit Ftm/ERC20_Token without collateral * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For FTM: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) @@ -219,7 +219,7 @@ abstract contract AaveResolver is Events, Helpers { address _token = isFTM ? wftmAddr : token; aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); - convertFtmToWftm(isFTM, TokenInterface(_token), _amt); + convertWftmToFtm(isFTM, TokenInterface(_token), _amt); setUint(setId, _amt); diff --git a/contracts/mainnet/connectors/aave/v3/main.sol b/contracts/mainnet/connectors/aave/v3/main.sol index cc46cb9b..16f58258 100644 --- a/contracts/mainnet/connectors/aave/v3/main.sol +++ b/contracts/mainnet/connectors/aave/v3/main.sol @@ -219,7 +219,7 @@ abstract contract AaveResolver is Events, Helpers { address _token = isEth ? wethAddr : token; aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); - convertEthToWeth(isEth, TokenInterface(_token), _amt); + convertWethToEth(isEth, TokenInterface(_token), _amt); setUint(setId, _amt); diff --git a/contracts/optimism/connectors/aave/v3/main.sol b/contracts/optimism/connectors/aave/v3/main.sol index 60f534e3..518032ed 100644 --- a/contracts/optimism/connectors/aave/v3/main.sol +++ b/contracts/optimism/connectors/aave/v3/main.sol @@ -219,7 +219,7 @@ abstract contract AaveResolver is Events, Helpers { address _token = isEth ? wethAddr : token; aave.borrow(_token, _amt, rateMode, referralCode, onBehalfOf); - convertEthToWeth(isEth, TokenInterface(_token), _amt); + convertWethToEth(isEth, TokenInterface(_token), _amt); setUint(setId, _amt); @@ -430,7 +430,6 @@ abstract contract AaveResolver is Events, Helpers { require(rateMode == 1 || rateMode == 2, "Invalid debt type"); uint256 _amt = getUint(getId, amount); - bool isEth = token == ethAddr; address _token = isEth ? wethAddr : token; diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index b05cd1b5..5ff5f53d 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -64,7 +64,7 @@ abstract contract AaveResolver is Events, Helpers { } /** - ** @dev Deposit ETH/ERC20_Token without collateral + ** @dev Deposit Matic/ERC20_Token without collateral * @notice Deposit a token to Aave v3 without enabling it as collateral. * @param token The address of the token to deposit.(For Matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to deposit. (For max: `uint256(-1)`) From 07af126574d5d9bb99d5349ac1d4736000bfe71d Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Thu, 28 Apr 2022 22:24:56 +0400 Subject: [PATCH 22/33] paybackOnBehalfOf added- Polygon --- .../polygon/connectors/aave/v3/events.sol | 8 ++++ .../polygon/connectors/aave/v3/helpers.sol | 21 +++++++-- contracts/polygon/connectors/aave/v3/main.sol | 45 +++++++++++++++++++ 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/contracts/polygon/connectors/aave/v3/events.sol b/contracts/polygon/connectors/aave/v3/events.sol index 800c7873..0324edcd 100644 --- a/contracts/polygon/connectors/aave/v3/events.sol +++ b/contracts/polygon/connectors/aave/v3/events.sol @@ -54,4 +54,12 @@ contract Events { uint256 getId, uint256 setId ); + event LogPaybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ); } diff --git a/contracts/polygon/connectors/aave/v3/helpers.sol b/contracts/polygon/connectors/aave/v3/helpers.sol index 4b2d239b..1f21db85 100644 --- a/contracts/polygon/connectors/aave/v3/helpers.sol +++ b/contracts/polygon/connectors/aave/v3/helpers.sol @@ -25,7 +25,7 @@ abstract contract Helpers is DSMath, Basic { /** * @dev Checks if collateral is enabled for an asset - * @param token token address of the asset.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the asset.(For matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) */ function getIsColl(address token) internal view returns (bool isCol) { @@ -37,7 +37,7 @@ abstract contract Helpers is DSMath, Basic { /** * @dev Get total debt balance & fee for an asset - * @param token token address of the debt.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the debt.(For matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) */ function getPaybackBalance(address token, uint256 rateMode) @@ -50,9 +50,24 @@ abstract contract Helpers is DSMath, Basic { return rateMode == 1 ? stableDebt : variableDebt; } + /** + * @dev Get OnBehalfOf user's total debt balance & fee for an asset + * @param token token address of the debt.(For matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) + */ + function getOnBehalfOfPaybackBalance(address token, uint256 rateMode, address onBehalfOf) + internal + view + returns (uint256) + { + (, uint256 stableDebt, uint256 variableDebt, , , , , , ) = aaveData + .getUserReserveData(token, onBehalfOf); + return rateMode == 1 ? stableDebt : variableDebt; + } + /** * @dev Get total collateral balance for an asset - * @param token token address of the collateral.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the collateral.(For matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) */ function getCollateralBalance(address token) internal diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index 5ff5f53d..a1336a8e 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -313,6 +313,51 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Payback borrowed matic/ERC20_Token on behalf os a user. + * @notice Payback debt owed on behalf os a user. + * @param token The address of the token to payback.(For matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to payback. (For max: `uint256(-1)`) + * @param rateMode The type of debt paying back. (For Stable: 1, Variable: 2) + * @param onBehalfOf Address of user who's debt to repay. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens paid back. + */ + function paybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isMatic = token == maticAddr; + address _token = isMatic ? wmaticAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + _amt = _amt == uint256(-1) ? getOnBehalfOfPaybackBalance(_token, rateMode, onBehalfOf) : _amt; + + if (isMatic) convertMaticToWmatic(isMatic, tokenContract, _amt); + + approve(tokenContract, address(aave), _amt); + + aave.repay(_token, _amt, rateMode, onBehalfOf); + + setUint(setId, _amt); + + _eventName = "LogPaybackOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); + } + /** * @dev Enable collateral * @notice Enable an array of tokens as collateral From a65d9dd7a6279e76e5a91d528942e800049f008e Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Fri, 29 Apr 2022 01:31:18 +0400 Subject: [PATCH 23/33] added paybackOnBehalfOf() - Optimism --- .../optimism/connectors/aave/v3/events.sol | 8 ++++ .../optimism/connectors/aave/v3/helpers.sol | 15 +++++++ .../optimism/connectors/aave/v3/main.sol | 45 +++++++++++++++++++ contracts/polygon/connectors/aave/v3/main.sol | 2 +- 4 files changed, 69 insertions(+), 1 deletion(-) diff --git a/contracts/optimism/connectors/aave/v3/events.sol b/contracts/optimism/connectors/aave/v3/events.sol index 800c7873..0324edcd 100644 --- a/contracts/optimism/connectors/aave/v3/events.sol +++ b/contracts/optimism/connectors/aave/v3/events.sol @@ -54,4 +54,12 @@ contract Events { uint256 getId, uint256 setId ); + event LogPaybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ); } diff --git a/contracts/optimism/connectors/aave/v3/helpers.sol b/contracts/optimism/connectors/aave/v3/helpers.sol index 5e66f60e..35cebed8 100644 --- a/contracts/optimism/connectors/aave/v3/helpers.sol +++ b/contracts/optimism/connectors/aave/v3/helpers.sol @@ -50,6 +50,21 @@ abstract contract Helpers is DSMath, Basic { return rateMode == 1 ? stableDebt : variableDebt; } + /** + * @dev Get OnBehalfOf user's total debt balance & fee for an asset + * @param token token address of the debt.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) + */ + function getOnBehalfOfPaybackBalance(address token, uint256 rateMode, address onBehalfOf) + internal + view + returns (uint256) + { + (, uint256 stableDebt, uint256 variableDebt, , , , , , ) = aaveData + .getUserReserveData(token, onBehalfOf); + return rateMode == 1 ? stableDebt : variableDebt; + } + /** * @dev Get total collateral balance for an asset * @param token token address of the collateral.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) diff --git a/contracts/optimism/connectors/aave/v3/main.sol b/contracts/optimism/connectors/aave/v3/main.sol index 518032ed..8d7e1f59 100644 --- a/contracts/optimism/connectors/aave/v3/main.sol +++ b/contracts/optimism/connectors/aave/v3/main.sol @@ -313,6 +313,51 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Payback borrowed ETH/ERC20_Token on behalf of a user. + * @notice Payback debt owed on behalf os a user. + * @param token The address of the token to payback.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to payback. (For max: `uint256(-1)`) + * @param rateMode The type of debt paying back. (For Stable: 1, Variable: 2) + * @param onBehalfOf Address of user who's debt to repay. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens paid back. + */ + function paybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + _amt = _amt == uint256(-1) ? getOnBehalfOfPaybackBalance(_token, rateMode, onBehalfOf) : _amt; + + if (isEth) convertEthToWeth(isEth, tokenContract, _amt); + + approve(tokenContract, address(aave), _amt); + + aave.repay(_token, _amt, rateMode, onBehalfOf); + + setUint(setId, _amt); + + _eventName = "LogPaybackOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); + } + /** * @dev Enable collateral * @notice Enable an array of tokens as collateral diff --git a/contracts/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index a1336a8e..d60d1b21 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/connectors/aave/v3/main.sol @@ -314,7 +314,7 @@ abstract contract AaveResolver is Events, Helpers { } /** - * @dev Payback borrowed matic/ERC20_Token on behalf os a user. + * @dev Payback borrowed matic/ERC20_Token on behalf of a user. * @notice Payback debt owed on behalf os a user. * @param token The address of the token to payback.(For matic: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to payback. (For max: `uint256(-1)`) From 9255d1a77e922a31aa24a1ebabd1c406872693c1 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Fri, 29 Apr 2022 01:35:31 +0400 Subject: [PATCH 24/33] paybackOnBehalfOf added - Mainnet --- .../mainnet/connectors/aave/v3/events.sol | 8 ++++ .../mainnet/connectors/aave/v3/helpers.sol | 15 ++++++ contracts/mainnet/connectors/aave/v3/main.sol | 46 +++++++++++++++++++ 3 files changed, 69 insertions(+) diff --git a/contracts/mainnet/connectors/aave/v3/events.sol b/contracts/mainnet/connectors/aave/v3/events.sol index 07888419..e60aaa12 100644 --- a/contracts/mainnet/connectors/aave/v3/events.sol +++ b/contracts/mainnet/connectors/aave/v3/events.sol @@ -53,4 +53,12 @@ contract Events { uint256 getId, uint256 setId ); + event LogPaybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ); } diff --git a/contracts/mainnet/connectors/aave/v3/helpers.sol b/contracts/mainnet/connectors/aave/v3/helpers.sol index ed7f03a2..1927aaa5 100644 --- a/contracts/mainnet/connectors/aave/v3/helpers.sol +++ b/contracts/mainnet/connectors/aave/v3/helpers.sol @@ -50,6 +50,21 @@ abstract contract Helpers is DSMath, Basic { return rateMode == 1 ? stableDebt : variableDebt; } + /** + * @dev Get OnBehalfOf user's total debt balance & fee for an asset + * @param token token address of the debt.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) + */ + function getOnBehalfOfPaybackBalance(address token, uint256 rateMode, address onBehalfOf) + internal + view + returns (uint256) + { + (, uint256 stableDebt, uint256 variableDebt, , , , , , ) = aaveData + .getUserReserveData(token, onBehalfOf); + return rateMode == 1 ? stableDebt : variableDebt; + } + /** * @dev Get total collateral balance for an asset * @param token token address of the collateral.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) diff --git a/contracts/mainnet/connectors/aave/v3/main.sol b/contracts/mainnet/connectors/aave/v3/main.sol index 16f58258..09c5493b 100644 --- a/contracts/mainnet/connectors/aave/v3/main.sol +++ b/contracts/mainnet/connectors/aave/v3/main.sol @@ -313,6 +313,52 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Payback borrowed ETH/ERC20_Token on behalf of a user. + * @notice Payback debt owed on behalf os a user. + * @param token The address of the token to payback.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to payback. (For max: `uint256(-1)`) + * @param rateMode The type of debt paying back. (For Stable: 1, Variable: 2) + * @param onBehalfOf Address of user who's debt to repay. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens paid back. + */ + function paybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + _amt = _amt == uint256(-1) ? getOnBehalfOfPaybackBalance(_token, rateMode, onBehalfOf) : _amt; + + if (isEth) convertEthToWeth(isEth, tokenContract, _amt); + + approve(tokenContract, address(aave), _amt); + + aave.repay(_token, _amt, rateMode, onBehalfOf); + + setUint(setId, _amt); + + _eventName = "LogPaybackOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); + } + + /** * @dev Enable collateral * @notice Enable an array of tokens as collateral From a3e48cc909bf3e2ad32e53045e1e7c373c812eb2 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Fri, 29 Apr 2022 01:39:06 +0400 Subject: [PATCH 25/33] paybackOnBehalfOf added - Fantom --- .../fantom/connectors/aave/v3/events.sol | 8 ++++ .../fantom/connectors/aave/v3/helpers.sol | 21 +++++++-- contracts/fantom/connectors/aave/v3/main.sol | 45 +++++++++++++++++++ 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/contracts/fantom/connectors/aave/v3/events.sol b/contracts/fantom/connectors/aave/v3/events.sol index 800c7873..0324edcd 100644 --- a/contracts/fantom/connectors/aave/v3/events.sol +++ b/contracts/fantom/connectors/aave/v3/events.sol @@ -54,4 +54,12 @@ contract Events { uint256 getId, uint256 setId ); + event LogPaybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ); } diff --git a/contracts/fantom/connectors/aave/v3/helpers.sol b/contracts/fantom/connectors/aave/v3/helpers.sol index a5a57c81..e0605c8d 100644 --- a/contracts/fantom/connectors/aave/v3/helpers.sol +++ b/contracts/fantom/connectors/aave/v3/helpers.sol @@ -25,7 +25,7 @@ abstract contract Helpers is DSMath, Basic { /** * @dev Checks if collateral is enabled for an asset - * @param token token address of the asset.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the asset.(For Ftm: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) */ function getIsColl(address token) internal view returns (bool isCol) { @@ -37,7 +37,7 @@ abstract contract Helpers is DSMath, Basic { /** * @dev Get total debt balance & fee for an asset - * @param token token address of the debt.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the debt.(For Ftm: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) */ function getPaybackBalance(address token, uint256 rateMode) @@ -50,9 +50,24 @@ abstract contract Helpers is DSMath, Basic { return rateMode == 1 ? stableDebt : variableDebt; } + /** + * @dev Get OnBehalfOf user's total debt balance & fee for an asset + * @param token token address of the debt.(For Ftm: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) + */ + function getOnBehalfOfPaybackBalance(address token, uint256 rateMode, address onBehalfOf) + internal + view + returns (uint256) + { + (, uint256 stableDebt, uint256 variableDebt, , , , , , ) = aaveData + .getUserReserveData(token, onBehalfOf); + return rateMode == 1 ? stableDebt : variableDebt; + } + /** * @dev Get total collateral balance for an asset - * @param token token address of the collateral.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the collateral.(For Ftm: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) */ function getCollateralBalance(address token) internal diff --git a/contracts/fantom/connectors/aave/v3/main.sol b/contracts/fantom/connectors/aave/v3/main.sol index ca0accf7..eb767a46 100644 --- a/contracts/fantom/connectors/aave/v3/main.sol +++ b/contracts/fantom/connectors/aave/v3/main.sol @@ -313,6 +313,51 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Payback borrowed ftm/ERC20_Token on behalf of a user. + * @notice Payback debt owed on behalf os a user. + * @param token The address of the token to payback.(For ftm: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to payback. (For max: `uint256(-1)`) + * @param rateMode The type of debt paying back. (For Stable: 1, Variable: 2) + * @param onBehalfOf Address of user who's debt to repay. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens paid back. + */ + function paybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isFTM = token == ftmAddr; + address _token = isFTM ? wftmAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + _amt = _amt == uint256(-1) ? getOnBehalfOfPaybackBalance(_token, rateMode, onBehalfOf) : _amt; + + if (isFTM) convertFtmToWftm(isFTM, tokenContract, _amt); + + approve(tokenContract, address(aave), _amt); + + aave.repay(_token, _amt, rateMode, onBehalfOf); + + setUint(setId, _amt); + + _eventName = "LogPaybackOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); + } + /** * @dev Enable collateral * @notice Enable an array of tokens as collateral From dc02452a224b333b89d75b1c2ed168003628040e Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Fri, 29 Apr 2022 01:43:56 +0400 Subject: [PATCH 26/33] paybackOnBehalfOf added - Avalanche --- .../avalanche/connectors/aave/v3/events.sol | 8 ++++ .../avalanche/connectors/aave/v3/helpers.sol | 21 +++++++-- .../avalanche/connectors/aave/v3/main.sol | 45 +++++++++++++++++++ 3 files changed, 71 insertions(+), 3 deletions(-) diff --git a/contracts/avalanche/connectors/aave/v3/events.sol b/contracts/avalanche/connectors/aave/v3/events.sol index 800c7873..0324edcd 100644 --- a/contracts/avalanche/connectors/aave/v3/events.sol +++ b/contracts/avalanche/connectors/aave/v3/events.sol @@ -54,4 +54,12 @@ contract Events { uint256 getId, uint256 setId ); + event LogPaybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ); } diff --git a/contracts/avalanche/connectors/aave/v3/helpers.sol b/contracts/avalanche/connectors/aave/v3/helpers.sol index 0fa43646..08c68889 100644 --- a/contracts/avalanche/connectors/aave/v3/helpers.sol +++ b/contracts/avalanche/connectors/aave/v3/helpers.sol @@ -25,7 +25,7 @@ abstract contract Helpers is DSMath, Basic { /** * @dev Checks if collateral is enabled for an asset - * @param token token address of the asset.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the asset.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) */ function getIsColl(address token) internal view returns (bool isCol) { @@ -37,7 +37,7 @@ abstract contract Helpers is DSMath, Basic { /** * @dev Get total debt balance & fee for an asset - * @param token token address of the debt.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the debt.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) */ function getPaybackBalance(address token, uint256 rateMode) @@ -50,9 +50,24 @@ abstract contract Helpers is DSMath, Basic { return rateMode == 1 ? stableDebt : variableDebt; } + /** + * @dev Get OnBehalfOf user's total debt balance & fee for an asset + * @param token token address of the debt.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) + */ + function getOnBehalfOfPaybackBalance(address token, uint256 rateMode, address onBehalfOf) + internal + view + returns (uint256) + { + (, uint256 stableDebt, uint256 variableDebt, , , , , , ) = aaveData + .getUserReserveData(token, onBehalfOf); + return rateMode == 1 ? stableDebt : variableDebt; + } + /** * @dev Get total collateral balance for an asset - * @param token token address of the collateral.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param token token address of the collateral.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) */ function getCollateralBalance(address token) internal diff --git a/contracts/avalanche/connectors/aave/v3/main.sol b/contracts/avalanche/connectors/aave/v3/main.sol index 19087d5f..842195b3 100644 --- a/contracts/avalanche/connectors/aave/v3/main.sol +++ b/contracts/avalanche/connectors/aave/v3/main.sol @@ -313,6 +313,51 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Payback borrowed avax/ERC20_Token on behalf of a user. + * @notice Payback debt owed on behalf os a user. + * @param token The address of the token to payback.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to payback. (For max: `uint256(-1)`) + * @param rateMode The type of debt paying back. (For Stable: 1, Variable: 2) + * @param onBehalfOf Address of user who's debt to repay. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens paid back. + */ + function paybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isAVAX = token == avaxAddr; + address _token = isAVAX ? wavaxAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + _amt = _amt == uint256(-1) ? getOnBehalfOfPaybackBalance(_token, rateMode, onBehalfOf) : _amt; + + if (isAVAX) convertAvaxToWavax(isAVAX, tokenContract, _amt); + + approve(tokenContract, address(aave), _amt); + + aave.repay(_token, _amt, rateMode, onBehalfOf); + + setUint(setId, _amt); + + _eventName = "LogPaybackOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); + } + /** * @dev Enable collateral * @notice Enable an array of tokens as collateral From c1351601f00437ee8785d9a53f1f7652a38d30d2 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Fri, 29 Apr 2022 01:47:55 +0400 Subject: [PATCH 27/33] paybackOnBehalfOf added - Arbitrum --- .../arbitrum/connectors/aave/v3/events.sol | 8 ++++ .../arbitrum/connectors/aave/v3/helpers.sol | 15 +++++++ .../arbitrum/connectors/aave/v3/main.sol | 45 +++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/contracts/arbitrum/connectors/aave/v3/events.sol b/contracts/arbitrum/connectors/aave/v3/events.sol index 800c7873..0324edcd 100644 --- a/contracts/arbitrum/connectors/aave/v3/events.sol +++ b/contracts/arbitrum/connectors/aave/v3/events.sol @@ -54,4 +54,12 @@ contract Events { uint256 getId, uint256 setId ); + event LogPaybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ); } diff --git a/contracts/arbitrum/connectors/aave/v3/helpers.sol b/contracts/arbitrum/connectors/aave/v3/helpers.sol index f1cfb63b..61400738 100644 --- a/contracts/arbitrum/connectors/aave/v3/helpers.sol +++ b/contracts/arbitrum/connectors/aave/v3/helpers.sol @@ -50,6 +50,21 @@ abstract contract Helpers is DSMath, Basic { return rateMode == 1 ? stableDebt : variableDebt; } + /** + * @dev Get OnBehalfOf user's total debt balance & fee for an asset + * @param token token address of the debt.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) + */ + function getOnBehalfOfPaybackBalance(address token, uint256 rateMode, address onBehalfOf) + internal + view + returns (uint256) + { + (, uint256 stableDebt, uint256 variableDebt, , , , , , ) = aaveData + .getUserReserveData(token, onBehalfOf); + return rateMode == 1 ? stableDebt : variableDebt; + } + /** * @dev Get total collateral balance for an asset * @param token token address of the collateral.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index 1bdda4a5..7f39fbcd 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -313,6 +313,51 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Payback borrowed ETH/ERC20_Token on behalf of a user. + * @notice Payback debt owed on behalf os a user. + * @param token The address of the token to payback.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to payback. (For max: `uint256(-1)`) + * @param rateMode The type of debt paying back. (For Stable: 1, Variable: 2) + * @param onBehalfOf Address of user who's debt to repay. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens paid back. + */ + function paybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + _amt = _amt == uint256(-1) ? getOnBehalfOfPaybackBalance(_token, rateMode, onBehalfOf) : _amt; + + if (isEth) convertEthToWeth(isEth, tokenContract, _amt); + + approve(tokenContract, address(aave), _amt); + + aave.repay(_token, _amt, rateMode, onBehalfOf); + + setUint(setId, _amt); + + _eventName = "LogPaybackOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); + } + /** * @dev Enable collateral * @notice Enable an array of tokens as collateral From a6a3d8438e968287fce5c428f96a23b0443e5b9e Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <47134275+shriyatyagii@users.noreply.github.com> Date: Fri, 29 Apr 2022 02:05:59 +0400 Subject: [PATCH 28/33] Update contracts/arbitrum/connectors/aave/v3/main.sol Co-authored-by: 0xPradyuman <63545809+pradyuman-verma@users.noreply.github.com> --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index 7f39fbcd..e8cd1ae6 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -194,7 +194,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 on behalf of a user * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param onBehalfOf The user who will incur the debt * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. From bc622864aba276c5a6a0003f713c9bd6968671cb Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <47134275+shriyatyagii@users.noreply.github.com> Date: Fri, 29 Apr 2022 02:06:55 +0400 Subject: [PATCH 29/33] Update contracts/arbitrum/connectors/aave/v3/main.sol Co-authored-by: 0xPradyuman <63545809+pradyuman-verma@users.noreply.github.com> --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index e8cd1ae6..c8a64b4a 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -455,7 +455,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Gives approval to delegate debt tokens * @param token The address of token * @param amount The amount - * @param rateMode The type of borrow debt + * @param rateMode The type of debt * @param delegateTo The address to whom the user is delegating * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens deposited. From 49f86dc29aff5fac9827b7c4b42756af04ce3dad Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <47134275+shriyatyagii@users.noreply.github.com> Date: Fri, 29 Apr 2022 02:07:03 +0400 Subject: [PATCH 30/33] Update contracts/arbitrum/connectors/aave/v3/main.sol Co-authored-by: 0xPradyuman <63545809+pradyuman-verma@users.noreply.github.com> --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index c8a64b4a..61608290 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -458,7 +458,7 @@ abstract contract AaveResolver is Events, Helpers { * @param rateMode The type of debt * @param delegateTo The address to whom the user is delegating * @param getId ID to retrieve amt. - * @param setId ID stores the amount of tokens deposited. + * @param setId ID stores the amount of tokens delegated. */ function delegateBorrow( address token, From 9ec3f8d2c55f5514041c5d13c47ae1abad5c179b Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Fri, 29 Apr 2022 02:35:53 +0400 Subject: [PATCH 31/33] minor updates --- contracts/arbitrum/connectors/aave/v3/main.sol | 2 +- contracts/avalanche/connectors/aave/v3/main.sol | 8 ++++---- contracts/fantom/connectors/aave/v3/main.sol | 8 ++++---- contracts/mainnet/connectors/aave/v3/main.sol | 8 ++++---- contracts/optimism/connectors/aave/v3/main.sol | 8 ++++---- hardhat.config.ts | 2 +- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/contracts/arbitrum/connectors/aave/v3/main.sol b/contracts/arbitrum/connectors/aave/v3/main.sol index 61608290..e7365567 100644 --- a/contracts/arbitrum/connectors/aave/v3/main.sol +++ b/contracts/arbitrum/connectors/aave/v3/main.sol @@ -158,7 +158,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v2 * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. */ diff --git a/contracts/avalanche/connectors/aave/v3/main.sol b/contracts/avalanche/connectors/aave/v3/main.sol index 842195b3..beec94a7 100644 --- a/contracts/avalanche/connectors/aave/v3/main.sol +++ b/contracts/avalanche/connectors/aave/v3/main.sol @@ -158,7 +158,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 * @param token The address of the token to borrow.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. */ @@ -194,7 +194,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 on behalf of a user * @param token The address of the token to borrow.(For avax: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param onBehalfOf The user who will incur the debt * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. @@ -454,10 +454,10 @@ abstract contract AaveResolver is Events, Helpers { * @notice Gives approval to delegate debt tokens * @param token The address of token * @param amount The amount - * @param rateMode The type of borrow debt + * @param rateMode The type of debt * @param delegateTo The address to whom the user is delegating * @param getId ID to retrieve amt. - * @param setId ID stores the amount of tokens deposited. + * @param setId ID stores the amount of tokens delegated. */ function approveDelegation( address token, diff --git a/contracts/fantom/connectors/aave/v3/main.sol b/contracts/fantom/connectors/aave/v3/main.sol index eb767a46..2a35f3dd 100644 --- a/contracts/fantom/connectors/aave/v3/main.sol +++ b/contracts/fantom/connectors/aave/v3/main.sol @@ -158,7 +158,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 * @param token The address of the token to borrow.(For ftm: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. */ @@ -194,7 +194,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 on behalf of a user * @param token The address of the token to borrow.(For FTM: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param onBehalfOf The user who will incur the debt * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. @@ -455,10 +455,10 @@ abstract contract AaveResolver is Events, Helpers { * @notice Gives approval to delegate debt tokens * @param token The address of token * @param amount The amount - * @param rateMode The type of borrow debt + * @param rateMode The type of debt * @param delegateTo The address to whom the user is delegating * @param getId ID to retrieve amt. - * @param setId ID stores the amount of tokens deposited. + * @param setId ID stores the amount of tokens delegated. */ function delegateBorrow( address token, diff --git a/contracts/mainnet/connectors/aave/v3/main.sol b/contracts/mainnet/connectors/aave/v3/main.sol index 09c5493b..dd78cd6e 100644 --- a/contracts/mainnet/connectors/aave/v3/main.sol +++ b/contracts/mainnet/connectors/aave/v3/main.sol @@ -158,7 +158,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. */ @@ -194,7 +194,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 on behalf of a user * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param onBehalfOf The user who will incur the debt * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. @@ -431,10 +431,10 @@ abstract contract AaveResolver is Events, Helpers { * @notice Gives approval to delegate debt tokens * @param token The address of token * @param amount The amount - * @param rateMode The type of borrow debt + * @param rateMode The type of debt * @param delegateTo The address to whom the user is delegating * @param getId ID to retrieve amt. - * @param setId ID stores the amount of tokens deposited. + * @param setId ID stores the amount of tokens delegated. */ function delegateBorrow( address token, diff --git a/contracts/optimism/connectors/aave/v3/main.sol b/contracts/optimism/connectors/aave/v3/main.sol index 8d7e1f59..04992f43 100644 --- a/contracts/optimism/connectors/aave/v3/main.sol +++ b/contracts/optimism/connectors/aave/v3/main.sol @@ -158,7 +158,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. */ @@ -194,7 +194,7 @@ abstract contract AaveResolver is Events, Helpers { * @notice Borrow a token using Aave v3 on behalf of a user * @param token The address of the token to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) * @param amt The amount of the token to borrow. - * @param rateMode The type of borrow debt. (For Stable: 1, Variable: 2) + * @param rateMode The type of debt. (For Stable: 1, Variable: 2) * @param onBehalfOf The user who will incur the debt * @param getId ID to retrieve amt. * @param setId ID stores the amount of tokens borrowed. @@ -455,10 +455,10 @@ abstract contract AaveResolver is Events, Helpers { * @notice Gives approval to delegate debt tokens * @param token The address of token * @param amount The amount - * @param rateMode The type of borrow debt + * @param rateMode The type of debt * @param delegateTo The address to whom the user is delegating * @param getId ID to retrieve amt. - * @param setId ID stores the amount of tokens deposited. + * @param setId ID stores the amount of tokens delegated. */ function delegateBorrow( address token, diff --git a/hardhat.config.ts b/hardhat.config.ts index 4a4e7a21..12280e70 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -40,7 +40,7 @@ const mnemonic = process.env.MNEMONIC ?? "test test test test test test test tes const networkGasPriceConfig: Record<string, number> = { mainnet: 100, polygon: 50, - avalanche: 30, + avalanche: 40, arbitrum: 1, optimism: 0.001, fantom: 300 From 963248d0d041c9aef34947df0ce4ea2b87f4dde6 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Sat, 30 Apr 2022 19:03:19 +0400 Subject: [PATCH 32/33] paybackOnBehalfOf added - Mainnet Aave V2 --- .../mainnet/connectors/aave/v2/events.sol | 8 ++++ .../mainnet/connectors/aave/v2/helpers.sol | 15 +++++++ contracts/mainnet/connectors/aave/v2/main.sol | 45 +++++++++++++++++++ 3 files changed, 68 insertions(+) diff --git a/contracts/mainnet/connectors/aave/v2/events.sol b/contracts/mainnet/connectors/aave/v2/events.sol index a89e15e4..ab4df395 100644 --- a/contracts/mainnet/connectors/aave/v2/events.sol +++ b/contracts/mainnet/connectors/aave/v2/events.sol @@ -8,4 +8,12 @@ contract Events { event LogPayback(address indexed token, uint256 tokenAmt, uint256 indexed rateMode, uint256 getId, uint256 setId); event LogEnableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); + event LogPaybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ); } diff --git a/contracts/mainnet/connectors/aave/v2/helpers.sol b/contracts/mainnet/connectors/aave/v2/helpers.sol index 75242db2..edd8c462 100644 --- a/contracts/mainnet/connectors/aave/v2/helpers.sol +++ b/contracts/mainnet/connectors/aave/v2/helpers.sol @@ -40,6 +40,21 @@ abstract contract Helpers is DSMath, Basic { return rateMode == 1 ? stableDebt : variableDebt; } + /** + * @dev Get OnBehalfOf user's total debt balance & fee for an asset + * @param token token address of the debt.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) + */ + function getOnBehalfOfPaybackBalance(address token, uint256 rateMode, address onBehalfOf) + internal + view + returns (uint256) + { + (, uint256 stableDebt, uint256 variableDebt, , , , , , ) = aaveData + .getUserReserveData(token, onBehalfOf); + return rateMode == 1 ? stableDebt : variableDebt; + } + /** * @dev Get total collateral balance for an asset * @param token token address of the collateral.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) diff --git a/contracts/mainnet/connectors/aave/v2/main.sol b/contracts/mainnet/connectors/aave/v2/main.sol index 6319d10d..8044180f 100644 --- a/contracts/mainnet/connectors/aave/v2/main.sol +++ b/contracts/mainnet/connectors/aave/v2/main.sol @@ -164,6 +164,51 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } + /** + * @dev Payback borrowed ETH/ERC20_Token on behalf of a user. + * @notice Payback debt owed on behalf os a user. + * @param token The address of the token to payback.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) + * @param amt The amount of the token to payback. (For max: `uint256(-1)`) + * @param rateMode The type of debt paying back. (For Stable: 1, Variable: 2) + * @param onBehalfOf Address of user who's debt to repay. + * @param getId ID to retrieve amt. + * @param setId ID stores the amount of tokens paid back. + */ + function paybackOnBehalfOf( + address token, + uint256 amt, + uint256 rateMode, + address onBehalfOf, + uint256 getId, + uint256 setId + ) + external + payable + returns (string memory _eventName, bytes memory _eventParam) + { + uint256 _amt = getUint(getId, amt); + + AaveInterface aave = AaveInterface(aaveProvider.getLendingPool()); + + bool isEth = token == ethAddr; + address _token = isEth ? wethAddr : token; + + TokenInterface tokenContract = TokenInterface(_token); + + _amt = _amt == uint256(-1) ? getOnBehalfOfPaybackBalance(_token, rateMode, onBehalfOf) : _amt; + + if (isEth) convertEthToWeth(isEth, tokenContract, _amt); + + approve(tokenContract, address(aave), _amt); + + aave.repay(_token, _amt, rateMode, onBehalfOf); + + setUint(setId, _amt); + + _eventName = "LogPaybackOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; + _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); + } + /** * @dev Enable collateral * @notice Enable an array of tokens as collateral From 8ebbeaae42ca913d9c22ede4e0d3b60ad4d4ecf4 Mon Sep 17 00:00:00 2001 From: Shriya Tyagi <shriya243@gmail.com> Date: Sun, 1 May 2022 15:13:25 +0400 Subject: [PATCH 33/33] Revert "paybackOnBehalfOf added - Mainnet Aave V2" This reverts commit 963248d0d041c9aef34947df0ce4ea2b87f4dde6. --- .../mainnet/connectors/aave/v2/events.sol | 8 ---- .../mainnet/connectors/aave/v2/helpers.sol | 15 ------- contracts/mainnet/connectors/aave/v2/main.sol | 45 ------------------- 3 files changed, 68 deletions(-) diff --git a/contracts/mainnet/connectors/aave/v2/events.sol b/contracts/mainnet/connectors/aave/v2/events.sol index ab4df395..a89e15e4 100644 --- a/contracts/mainnet/connectors/aave/v2/events.sol +++ b/contracts/mainnet/connectors/aave/v2/events.sol @@ -8,12 +8,4 @@ contract Events { event LogPayback(address indexed token, uint256 tokenAmt, uint256 indexed rateMode, uint256 getId, uint256 setId); event LogEnableCollateral(address[] tokens); event LogSwapRateMode(address indexed token, uint256 rateMode); - event LogPaybackOnBehalfOf( - address token, - uint256 amt, - uint256 rateMode, - address onBehalfOf, - uint256 getId, - uint256 setId - ); } diff --git a/contracts/mainnet/connectors/aave/v2/helpers.sol b/contracts/mainnet/connectors/aave/v2/helpers.sol index edd8c462..75242db2 100644 --- a/contracts/mainnet/connectors/aave/v2/helpers.sol +++ b/contracts/mainnet/connectors/aave/v2/helpers.sol @@ -40,21 +40,6 @@ abstract contract Helpers is DSMath, Basic { return rateMode == 1 ? stableDebt : variableDebt; } - /** - * @dev Get OnBehalfOf user's total debt balance & fee for an asset - * @param token token address of the debt.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) - * @param rateMode Borrow rate mode (Stable = 1, Variable = 2) - */ - function getOnBehalfOfPaybackBalance(address token, uint256 rateMode, address onBehalfOf) - internal - view - returns (uint256) - { - (, uint256 stableDebt, uint256 variableDebt, , , , , , ) = aaveData - .getUserReserveData(token, onBehalfOf); - return rateMode == 1 ? stableDebt : variableDebt; - } - /** * @dev Get total collateral balance for an asset * @param token token address of the collateral.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) diff --git a/contracts/mainnet/connectors/aave/v2/main.sol b/contracts/mainnet/connectors/aave/v2/main.sol index 8044180f..6319d10d 100644 --- a/contracts/mainnet/connectors/aave/v2/main.sol +++ b/contracts/mainnet/connectors/aave/v2/main.sol @@ -164,51 +164,6 @@ abstract contract AaveResolver is Events, Helpers { _eventParam = abi.encode(token, _amt, rateMode, getId, setId); } - /** - * @dev Payback borrowed ETH/ERC20_Token on behalf of a user. - * @notice Payback debt owed on behalf os a user. - * @param token The address of the token to payback.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) - * @param amt The amount of the token to payback. (For max: `uint256(-1)`) - * @param rateMode The type of debt paying back. (For Stable: 1, Variable: 2) - * @param onBehalfOf Address of user who's debt to repay. - * @param getId ID to retrieve amt. - * @param setId ID stores the amount of tokens paid back. - */ - function paybackOnBehalfOf( - address token, - uint256 amt, - uint256 rateMode, - address onBehalfOf, - uint256 getId, - uint256 setId - ) - external - payable - returns (string memory _eventName, bytes memory _eventParam) - { - uint256 _amt = getUint(getId, amt); - - AaveInterface aave = AaveInterface(aaveProvider.getLendingPool()); - - bool isEth = token == ethAddr; - address _token = isEth ? wethAddr : token; - - TokenInterface tokenContract = TokenInterface(_token); - - _amt = _amt == uint256(-1) ? getOnBehalfOfPaybackBalance(_token, rateMode, onBehalfOf) : _amt; - - if (isEth) convertEthToWeth(isEth, tokenContract, _amt); - - approve(tokenContract, address(aave), _amt); - - aave.repay(_token, _amt, rateMode, onBehalfOf); - - setUint(setId, _amt); - - _eventName = "LogPaybackOnBehalfOf(address,uint256,uint256,address,uint256,uint256)"; - _eventParam = abi.encode(token, _amt, rateMode, onBehalfOf, getId, setId); - } - /** * @dev Enable collateral * @notice Enable an array of tokens as collateral