mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	allowing more deposit types in borrow spell
This commit is contained in:
		
							parent
							
								
									cfd1eec589
								
							
						
					
					
						commit
						016c8d4370
					
				| 
						 | 
				
			
			@ -213,7 +213,7 @@ contract Helpers is Basic {
 | 
			
		|||
 | 
			
		||||
    function getDepositCollateralBorrowAndWithdrawActions(
 | 
			
		||||
        uint16 depositCurrencyId,
 | 
			
		||||
        bool useUnderlying,
 | 
			
		||||
        DepositActionType depositAction,
 | 
			
		||||
        uint256 depositAmount,
 | 
			
		||||
        uint16 borrowCurrencyId,
 | 
			
		||||
        uint8 marketIndex,
 | 
			
		||||
| 
						 | 
				
			
			@ -221,9 +221,29 @@ contract Helpers is Basic {
 | 
			
		|||
        uint32 maxBorrowRate,
 | 
			
		||||
        bool redeemToUnderlying
 | 
			
		||||
    ) internal returns (BalanceActionWithTrades[] memory action) {
 | 
			
		||||
        // TODO: allow minting nTokens here....
 | 
			
		||||
        BalanceActionWithTrades[]
 | 
			
		||||
            memory actions = new BalanceActionWithTrades[](2);
 | 
			
		||||
        BalanceActionWithTrades[] memory actions;
 | 
			
		||||
        bytes32[] memory trades = new bytes32[](1);
 | 
			
		||||
        trades[0] = encodeBorrowTrade(marketIndex, fCashAmount, maxBorrowRate);
 | 
			
		||||
 | 
			
		||||
        if (depositCurrencyId == borrowCurrencyId) {
 | 
			
		||||
            // In this case the account is likely borrowing against newly minted nTokens
 | 
			
		||||
            // in the same currency. Technically the other deposit actions may work but
 | 
			
		||||
            // there's no good reason to borrow against cToken collateral
 | 
			
		||||
            actions = new BalanceActionWithTrades[](1);
 | 
			
		||||
            actions[0].actionType = depositAction;
 | 
			
		||||
            actions[0].currencyId = depositCurrencyId;
 | 
			
		||||
            actions[0].depositActionAmount = depositAmount;
 | 
			
		||||
            // Withdraw borrowed amount to wallet
 | 
			
		||||
            actions[0].withdrawEntireCashBalance = true;
 | 
			
		||||
            actions[0].redeemToUnderlying = redeemToUnderlying;
 | 
			
		||||
            actions[0].trades = trades;
 | 
			
		||||
 | 
			
		||||
            return actions;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // This is the more common case that the account is borrowing against
 | 
			
		||||
        // collateral in a different currency
 | 
			
		||||
        actions = new BalanceActionWithTrades[](2);
 | 
			
		||||
 | 
			
		||||
        uint256 depositIndex;
 | 
			
		||||
        uint256 borrowIndex;
 | 
			
		||||
| 
						 | 
				
			
			@ -236,9 +256,7 @@ contract Helpers is Basic {
 | 
			
		|||
            borrowIndex = 0;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        actions[depositIndex].actionType = useUnderlying
 | 
			
		||||
            ? DepositActionType.DepositUnderlying
 | 
			
		||||
            : DepositActionType.DepositAsset;
 | 
			
		||||
        actions[depositIndex].actionType = depositAction;
 | 
			
		||||
        actions[depositIndex].currencyId = depositCurrencyId;
 | 
			
		||||
        actions[depositIndex].depositActionAmount = depositAmount;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -247,12 +265,8 @@ contract Helpers is Basic {
 | 
			
		|||
        // Withdraw borrowed amount to wallet
 | 
			
		||||
        actions[borrowIndex].withdrawEntireCashBalance = true;
 | 
			
		||||
        actions[borrowIndex].redeemToUnderlying = redeemToUnderlying;
 | 
			
		||||
 | 
			
		||||
        bytes32[] memory trades = new bytes32[](1);
 | 
			
		||||
        trades[0] = encodeBorrowTrade(marketIndex, fCashAmount, maxBorrowRate);
 | 
			
		||||
        actions[borrowIndex].trades = trades;
 | 
			
		||||
 | 
			
		||||
        return actions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -455,14 +455,25 @@ abstract contract NotionalResolver is Events, Helpers {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @notice Deposits some amount of tokens as collateral and borrows
 | 
			
		||||
     * @notice Deposits some amount of tokens as collateral and borrows. This can be achieved by combining multiple spells but this
 | 
			
		||||
     * method is more gas efficient by only making a single call to Notional.
 | 
			
		||||
     * @dev Setting the fCash amount and maxBorrowRate are best calculated using the Notional SDK off chain. The amount of fCash
 | 
			
		||||
     * when borrowing is more forgiving compared to lending since generally accounts will over collateralize and dust amounts are
 | 
			
		||||
     * less likely to cause reverts. The Notional SDK will also provide calculations to tell the user what their LTV is for a given
 | 
			
		||||
     * borrowing action.
 | 
			
		||||
     * @param depositCurrencyId notional defined currency id of the collateral to deposit
 | 
			
		||||
     * @param useUnderlying if true, will accept a deposit collateralin the underlying currency (i.e DAI), if false
 | 
			
		||||
     * will use the asset currency (i.e. cDAI)
 | 
			
		||||
     * @param depositAction one of the following values which will define how the collateral is deposited:
 | 
			
		||||
     *  - None: no collateral will be deposited
 | 
			
		||||
     *  - DepositAsset: deposit amount will be specified in asset tokens (i.e. cTokens)
 | 
			
		||||
     *  - DepositUnderlying: deposit amount will be specified in underlying tokens (i.e. DAI)
 | 
			
		||||
     *  - DepositAssetAndMintNToken: deposit amount will be converted to nTokens
 | 
			
		||||
     *  - DepositUnderlyingAndMintNToken: deposit amount will be converted to nTokens
 | 
			
		||||
     *
 | 
			
		||||
     *  Technically these two deposit types can be used, but there is not a clear reason why they would be used in combination
 | 
			
		||||
     *  with borrowing:
 | 
			
		||||
     *  - RedeemNToken
 | 
			
		||||
     *  - ConvertCashToNToken
 | 
			
		||||
     *
 | 
			
		||||
     * @param depositAmount amount of cash to deposit as collateral
 | 
			
		||||
     * @param borrowCurrencyId id of the currency to borrow
 | 
			
		||||
     * @param marketIndex the market index to borrow from. This is a number from 1 to 7 which corresponds to the tenor
 | 
			
		||||
| 
						 | 
				
			
			@ -478,7 +489,7 @@ abstract contract NotionalResolver is Events, Helpers {
 | 
			
		|||
     */
 | 
			
		||||
    function depositCollateralBorrowAndWithdraw(
 | 
			
		||||
        uint16 depositCurrencyId,
 | 
			
		||||
        bool useUnderlying,
 | 
			
		||||
        DepositActionType depositAction,
 | 
			
		||||
        uint256 depositAmount,
 | 
			
		||||
        uint16 borrowCurrencyId,
 | 
			
		||||
        uint8 marketIndex,
 | 
			
		||||
| 
						 | 
				
			
			@ -492,7 +503,10 @@ abstract contract NotionalResolver is Events, Helpers {
 | 
			
		|||
        payable
 | 
			
		||||
        returns (string memory _eventName, bytes memory _eventParam)
 | 
			
		||||
    {
 | 
			
		||||
        require(depositCurrencyId != borrowCurrencyId);
 | 
			
		||||
        bool useUnderlying = (
 | 
			
		||||
            depositAction == DepositActionType.DepositUnderlying || 
 | 
			
		||||
            depositAction == DepositActionType.DepositUnderlyingAndMintNToken
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
        depositAmount = getDepositAmountAndSetApproval(
 | 
			
		||||
            getId,
 | 
			
		||||
| 
						 | 
				
			
			@ -504,7 +518,7 @@ abstract contract NotionalResolver is Events, Helpers {
 | 
			
		|||
        BalanceActionWithTrades[]
 | 
			
		||||
            memory actions = getDepositCollateralBorrowAndWithdrawActions(
 | 
			
		||||
                depositCurrencyId,
 | 
			
		||||
                useUnderlying,
 | 
			
		||||
                depositAction,
 | 
			
		||||
                depositAmount,
 | 
			
		||||
                borrowCurrencyId,
 | 
			
		||||
                marketIndex,
 | 
			
		||||
| 
						 | 
				
			
			@ -513,9 +527,10 @@ abstract contract NotionalResolver is Events, Helpers {
 | 
			
		|||
                redeemToUnderlying
 | 
			
		||||
            );
 | 
			
		||||
 | 
			
		||||
        uint256 msgValue = getMsgValue(depositCurrencyId, useUnderlying, depositAmount);
 | 
			
		||||
        executeTradeActionWithBalanceChange(
 | 
			
		||||
            actions,
 | 
			
		||||
            getMsgValue(depositCurrencyId, useUnderlying, depositAmount),
 | 
			
		||||
            msgValue,
 | 
			
		||||
            borrowCurrencyId,
 | 
			
		||||
            redeemToUnderlying,
 | 
			
		||||
            setId
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user