Morpho-Aave: changes added

This commit is contained in:
Shriya Tyagi 2022-10-15 08:17:36 +04:00
parent bc9abcd4d6
commit f6db02d83a
5 changed files with 81 additions and 85 deletions

View File

@ -71,5 +71,9 @@ contract Events {
uint256 setId uint256 setId
); );
event LogClaimed(address[] tokenAddresses, bool tradeForMorphoToken); event LogClaimed(
address[] tokenAddresses,
bool tradeForMorphoToken,
uint256 claimedAmount
);
} }

View File

@ -7,9 +7,31 @@ import "../../common/basic.sol";
import "../../common/interfaces.sol"; import "../../common/interfaces.sol";
abstract contract Helpers is Stores, Basic { abstract contract Helpers is Stores, Basic {
IMorphoCore public constant morphoAave = IMorphoCore public constant MORPHO_AAVE =
IMorphoCore(0x777777c9898D384F785Ee44Acfe945efDFf5f3E0); IMorphoCore(0x777777c9898D384F785Ee44Acfe945efDFf5f3E0);
IMorphoAaveLens public constant morphoAaveLens = IMorphoAaveLens public constant MORPHO_AAVE_LENS =
IMorphoAaveLens(0x507fA343d0A90786d86C7cd885f5C49263A91FF4); IMorphoAaveLens(0x507fA343d0A90786d86C7cd885f5C49263A91FF4);
function _performEthToWethConversion(
address _tokenAddress,
uint256 _amount,
uint256 _getId
) internal returns (TokenInterface _tokenContract, uint256 _amt) {
_amt = getUint(_getId, _amount);
bool _isETH = _tokenAddress == ethAddr;
_tokenContract = _isETH
? TokenInterface(wethAddr)
: TokenInterface(_tokenAddress);
if (_amt == uint256(-1)) {
_amt = _isETH
? address(this).balance
: _tokenContract.balanceOf(address(this));
}
if (_isETH) convertEthToWeth(_isETH, _tokenContract, _amt);
}
} }

View File

@ -32,28 +32,25 @@ interface IMorphoCore {
uint256 _amount uint256 _amount
) external; ) external;
function claimRewards( function claimRewards(address[] calldata _assets, bool _tradeForMorphoToken)
address[] calldata _tokenAddresses, external
bool _tradeForMorphoToken returns (uint256 claimedAmount);
) external;
} }
interface IMorphoAaveLens { interface IMorphoAaveLens {
function _getCurrentBorrowBalanceInOf(address _poolToken, address _user) function getCurrentBorrowBalanceInOf(address _poolToken, address _user)
external external
view view
returns ( returns (
address underlyingToken,
uint256 balanceInP2P, uint256 balanceInP2P,
uint256 balanceOnPool, uint256 balanceOnPool,
uint256 totalBalance uint256 totalBalance
); );
function _getCurrentSupplyBalanceInOf(address _poolToken, address _user) function getCurrentSupplyBalanceInOf(address _poolToken, address _user)
external external
view view
returns ( returns (
address underlyingToken,
uint256 balanceInP2P, uint256 balanceInP2P,
uint256 balanceOnPool, uint256 balanceOnPool,
uint256 totalBalance uint256 totalBalance

View File

@ -4,7 +4,7 @@ pragma experimental ABIEncoderV2;
import "./helpers.sol"; import "./helpers.sol";
import "./events.sol"; import "./events.sol";
abstract contract MorphoAave is Helpers, Events { abstract contract MorphoAaveV2 is Helpers, Events {
/** /**
* @dev Deposit ETH/ERC20_Token. * @dev Deposit ETH/ERC20_Token.
* @notice Deposit a token to Morpho Aave for lending / collaterization. * @notice Deposit a token to Morpho Aave for lending / collaterization.
@ -25,25 +25,14 @@ abstract contract MorphoAave is Helpers, Events {
payable payable
returns (string memory _eventName, bytes memory _eventParam) returns (string memory _eventName, bytes memory _eventParam)
{ {
uint256 _amt = getUint(_getId, _amount); (
TokenInterface _tokenContract,
uint256 _amt
) = _performEthToWethConversion(_tokenAddress, _amount, _getId);
bool _isETH = _tokenAddress == ethAddr; approve(_tokenContract, address(MORPHO_AAVE), _amt);
TokenInterface _tokenContract = _isETH MORPHO_AAVE.supply(_poolTokenAddress, address(this), _amt);
? TokenInterface(wethAddr)
: TokenInterface(_tokenAddress);
if (_amt == uint256(-1)) {
_amt = _isETH
? address(this).balance
: _tokenContract.balanceOf(address(this));
}
if (_isETH) convertEthToWeth(_isETH, _tokenContract, _amt);
approve(_tokenContract, address(morphoAave), _amt);
morphoAave.supply(_poolTokenAddress, address(this), _amt);
setUint(_setId, _amt); setUint(_setId, _amt);
@ -79,25 +68,14 @@ abstract contract MorphoAave is Helpers, Events {
payable payable
returns (string memory _eventName, bytes memory _eventParam) returns (string memory _eventName, bytes memory _eventParam)
{ {
uint256 _amt = getUint(_getId, _amount); (
TokenInterface _tokenContract,
uint256 _amt
) = _performEthToWethConversion(_tokenAddress, _amount, _getId);
bool _isETH = _tokenAddress == ethAddr; approve(_tokenContract, address(MORPHO_AAVE), _amt);
TokenInterface _tokenContract = _isETH MORPHO_AAVE.supply(
? TokenInterface(wethAddr)
: TokenInterface(_tokenAddress);
if (_amt == uint256(-1)) {
_amt = _isETH
? address(this).balance
: _tokenContract.balanceOf(address(this));
}
if (_isETH) convertEthToWeth(_isETH, _tokenContract, _amt);
approve(_tokenContract, address(morphoAave), _amt);
morphoAave.supply(
_poolTokenAddress, _poolTokenAddress,
address(this), address(this),
_amt, _amt,
@ -139,25 +117,14 @@ abstract contract MorphoAave is Helpers, Events {
payable payable
returns (string memory _eventName, bytes memory _eventParam) returns (string memory _eventName, bytes memory _eventParam)
{ {
uint256 _amt = getUint(_getId, _amount); (
TokenInterface _tokenContract,
uint256 _amt
) = _performEthToWethConversion(_tokenAddress, _amount, _getId);
bool _isETH = _tokenAddress == ethAddr; approve(_tokenContract, address(MORPHO_AAVE), _amt);
TokenInterface _tokenContract = _isETH MORPHO_AAVE.supply(_poolTokenAddress, _onBehalf, _amt);
? TokenInterface(wethAddr)
: TokenInterface(_tokenAddress);
if (_amt == uint256(-1)) {
_amt = _isETH
? address(this).balance
: _tokenContract.balanceOf(address(this));
}
if (_isETH) convertEthToWeth(_isETH, _tokenContract, _amt);
approve(_tokenContract, address(morphoAave), _amt);
morphoAave.supply(_poolTokenAddress, _onBehalf, _amt);
setUint(_setId, _amt); setUint(_setId, _amt);
@ -196,7 +163,7 @@ abstract contract MorphoAave is Helpers, Events {
bool _isETH = _tokenAddress == ethAddr; bool _isETH = _tokenAddress == ethAddr;
morphoAave.borrow(_poolTokenAddress, _amt); MORPHO_AAVE.borrow(_poolTokenAddress, _amt);
if (_isETH) convertWethToEth(_isETH, TokenInterface(wethAddr), _amt); if (_isETH) convertWethToEth(_isETH, TokenInterface(wethAddr), _amt);
@ -238,7 +205,7 @@ abstract contract MorphoAave is Helpers, Events {
bool _isETH = _tokenAddress == ethAddr; bool _isETH = _tokenAddress == ethAddr;
morphoAave.borrow(_poolTokenAddress, _amt, _maxGasForMatching); MORPHO_AAVE.borrow(_poolTokenAddress, _amt, _maxGasForMatching);
if (_isETH) convertWethToEth(_isETH, TokenInterface(wethAddr), _amt); if (_isETH) convertWethToEth(_isETH, TokenInterface(wethAddr), _amt);
@ -277,17 +244,16 @@ abstract contract MorphoAave is Helpers, Events {
{ {
uint256 _amt = getUint(_getId, _amount); uint256 _amt = getUint(_getId, _amount);
bool _isETH = _tokenAddress == ethAddr; bool _isETH = _tokenAddress == ethAddr;
address _token = _isETH ? wethAddr : _tokenAddress;
if (_amt == uint256(-1)) if (_amt == uint256(-1))
(, , , _amt) = morphoAaveLens.getCurrentSupplyBalanceInOf( (, , _amt) = MORPHO_AAVE_LENS.getCurrentSupplyBalanceInOf(
_poolTokenAddress, _poolTokenAddress,
address(this) address(this)
); );
morphoAave.withdraw(_poolTokenAddress, _amt); MORPHO_AAVE.withdraw(_poolTokenAddress, _amt);
convertWethToEth(_isETH, TokenInterface(_token), _amt); if (_isETH) convertWethToEth(_isETH, TokenInterface(wethAddr), _amt);
setUint(_setId, _amt); setUint(_setId, _amt);
@ -333,17 +299,17 @@ abstract contract MorphoAave is Helpers, Events {
? address(this).balance ? address(this).balance
: _tokenContract.balanceOf(address(this)); : _tokenContract.balanceOf(address(this));
(, , , uint256 _amtDebt) = morphoAaveLens (, , uint256 _amtDebt) = MORPHO_AAVE_LENS
.getCurrentBorrowBalanceInOf(_poolTokenAddress, address(this)); .getCurrentBorrowBalanceInOf(_poolTokenAddress, address(this));
_amt = _amtDSA <= _amtDebt ? _amtDSA : _amtDebt; _amt = _amtDSA < _amtDebt ? _amtDSA : _amtDebt;
} }
if (_isETH) convertEthToWeth(_isETH, _tokenContract, _amt); if (_isETH) convertEthToWeth(_isETH, _tokenContract, _amt);
approve(_tokenContract, address(morphoAave), _amt); approve(_tokenContract, address(MORPHO_AAVE), _amt);
morphoAave.repay(_poolTokenAddress, address(this), _amt); MORPHO_AAVE.repay(_poolTokenAddress, address(this), _amt);
setUint(_setId, _amt); setUint(_setId, _amt);
@ -391,17 +357,17 @@ abstract contract MorphoAave is Helpers, Events {
? address(this).balance ? address(this).balance
: _tokenContract.balanceOf(address(this)); : _tokenContract.balanceOf(address(this));
(, , , uint256 _amtDebt) = morphoAaveLens (, , uint256 _amtDebt) = MORPHO_AAVE_LENS
._getCurrentBorrowBalanceInOf(_poolTokenAddress, _onBehalf); .getCurrentBorrowBalanceInOf(_poolTokenAddress, _onBehalf);
_amt = _amtDSA <= _amtDebt ? _amtDSA : _amtDebt; _amt = _amtDSA < _amtDebt ? _amtDSA : _amtDebt;
} }
if (_isETH) convertEthToWeth(_isETH, _tokenContract, _amt); if (_isETH) convertEthToWeth(_isETH, _tokenContract, _amt);
approve(_tokenContract, address(morphoAave), _amt); approve(_tokenContract, address(MORPHO_AAVE), _amt);
morphoAave.repay(_poolTokenAddress, _onBehalf, _amt); MORPHO_AAVE.repay(_poolTokenAddress, _onBehalf, _amt);
setUint(_setId, _amt); setUint(_setId, _amt);
@ -430,13 +396,20 @@ abstract contract MorphoAave is Helpers, Events {
payable payable
returns (string memory _eventName, bytes memory _eventParam) returns (string memory _eventName, bytes memory _eventParam)
{ {
morphoAave.claimRewards(_poolTokenAddresses, _tradeForMorphoToken); uint256 _claimedAmount = MORPHO_AAVE.claimRewards(
_poolTokenAddresses,
_tradeForMorphoToken
);
_eventName = "LogClaimed(address[],bool)"; _eventName = "LogClaimed(address[],bool,uint256)";
_eventParam = abi.encode(_poolTokenAddresses, _tradeForMorphoToken); _eventParam = abi.encode(
_poolTokenAddresses,
_tradeForMorphoToken,
_claimedAmount
);
} }
} }
contract ConnectV2MorphoAave is MorphoAave { contract ConnectV2MorphoAaveV2 is MorphoAaveV2 {
string public constant name = "Morpho-Aave-v1.0"; string public constant name = "Morpho-AaveV2-v1.0";
} }

View File

@ -5,7 +5,7 @@ import { addresses } from "../../../scripts/tests/mainnet/addresses";
import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector"; import { deployAndEnableConnector } from "../../../scripts/tests/deployAndEnableConnector";
import { getMasterSigner } from "../../../scripts/tests/getMasterSigner"; import { getMasterSigner } from "../../../scripts/tests/getMasterSigner";
import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2"; import { buildDSAv2 } from "../../../scripts/tests/buildDSAv2";
import { ConnectV2MorphoAave__factory, IERC20Minimal__factory } from "../../../typechain"; import { ConnectV2MorphoAaveV2__factory, IERC20Minimal__factory } from "../../../typechain";
import { parseEther, parseUnits } from "@ethersproject/units"; import { parseEther, parseUnits } from "@ethersproject/units";
import { encodeSpells } from "../../../scripts/tests/encodeSpells"; import { encodeSpells } from "../../../scripts/tests/encodeSpells";
import { dsaMaxValue, tokens } from "../../../scripts/tests/mainnet/tokens"; import { dsaMaxValue, tokens } from "../../../scripts/tests/mainnet/tokens";
@ -64,7 +64,7 @@ describe("Morpho-Aave", function () {
); );
connector = await deployAndEnableConnector({ connector = await deployAndEnableConnector({
connectorName, connectorName,
contractArtifact: ConnectV2MorphoAave__factory, contractArtifact: ConnectV2MorphoAaveV2__factory,
signer: masterSigner, signer: masterSigner,
connectors: instaConnectorsV2, connectors: instaConnectorsV2,
}); });