Skip to content

Commit f0d84aa

Browse files
authored
fix: adjust approveSetToken method for aave based leverage tokens (#207)
1 parent 607277b commit f0d84aa

File tree

1 file changed

+30
-2
lines changed

1 file changed

+30
-2
lines changed

contracts/exchangeIssuance/FlashmintLeveragedZeroEx.sol

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ contract FlashMintLeveragedZeroEx is ReentrancyGuard, Ownable {
5555

5656
struct LeveragedTokenData {
5757
address collateralToken;
58+
address collateralAToken;
5859
uint256 collateralAmount;
5960
address debtToken;
6061
uint256 debtAmount;
@@ -397,9 +398,17 @@ contract FlashMintLeveragedZeroEx is ReentrancyGuard, Ownable {
397398
function approveSetToken(ISetToken _setToken, bool _isAave) external {
398399
LeveragedTokenData memory leveragedTokenData = _getLeveragedTokenData(_setToken, 1 ether, true, _isAave);
399400

400-
_approveToken(IERC20(leveragedTokenData.collateralToken));
401401

402-
_approveToken(IERC20(leveragedTokenData.debtToken));
402+
if(_isAave){
403+
_approveToken(IERC20(leveragedTokenData.collateralAToken));
404+
_approveToken(IERC20(leveragedTokenData.debtToken));
405+
_approveTokenToLendingPool(IERC20(leveragedTokenData.collateralToken));
406+
_approveTokenToLendingPool(IERC20(leveragedTokenData.debtToken));
407+
} else {
408+
_approveToken(IERC20(leveragedTokenData.collateralToken));
409+
_approveToken(IERC20(leveragedTokenData.debtToken));
410+
411+
}
403412
}
404413

405414
/* ============ Internal Functions ============ */
@@ -592,13 +601,15 @@ contract FlashMintLeveragedZeroEx is ReentrancyGuard, Ownable {
592601
if(equityPositions[0] > 0){
593602
return LeveragedTokenData(
594603
_isAave ? IAToken(components[0]).UNDERLYING_ASSET_ADDRESS() : components[0],
604+
_isAave ? components[0] : address(0),
595605
equityPositions[0] + ROUNDING_ERROR_MARGIN,
596606
components[1],
597607
debtPositions[1]
598608
);
599609
} else {
600610
return LeveragedTokenData(
601611
_isAave ? IAToken(components[1]).UNDERLYING_ASSET_ADDRESS() : components[1],
612+
_isAave ? components[1] : address(0),
602613
equityPositions[1] + ROUNDING_ERROR_MARGIN,
603614
components[0],
604615
debtPositions[0]
@@ -617,6 +628,23 @@ contract FlashMintLeveragedZeroEx is ReentrancyGuard, Ownable {
617628
_safeApprove(_token, address(debtIssuanceModule), MAX_UINT256);
618629
}
619630

631+
/**
632+
* Approves max amount of token to lending pool
633+
*
634+
* @param _token Address of the token to approve
635+
*/
636+
function _approveTokenToLendingPool(
637+
IERC20 _token
638+
)
639+
internal
640+
{
641+
uint256 allowance = _token.allowance(address(this), address(aavePool));
642+
if (allowance > 0) {
643+
_token.approve(address(aavePool), 0);
644+
}
645+
_token.approve(address(aavePool), MAX_UINT256);
646+
}
647+
620648
/**
621649
* Initiates a flashloan call with the correct parameters for issuing set tokens in the callback
622650
* Borrows correct amount of collateral token and and forwards encoded memory to controll issuance in the callback.

0 commit comments

Comments
 (0)