mirror of
				https://github.com/Instadapp/dsa-connectors.git
				synced 2024-07-29 22:37:00 +00:00 
			
		
		
		
	importWithCollateral-arbitrum
This commit is contained in:
		
							parent
							
								
									8be787aa88
								
							
						
					
					
						commit
						878f82c63d
					
				|  | @ -12,4 +12,14 @@ contract Events { | |||
| 		uint256[] supplyAmts, | ||||
| 		uint256[] borrowAmts | ||||
| 	); | ||||
| 	event LogAaveV3ImportWithCollateral( | ||||
| 		address indexed user, | ||||
| 		address[] ctokens, | ||||
| 		string[] supplyIds, | ||||
| 		string[] borrowIds, | ||||
| 		uint256[] flashLoanFees, | ||||
| 		uint256[] supplyAmts, | ||||
| 		uint256[] borrowAmts, | ||||
| 		bool[] enableCollateral | ||||
| 	); | ||||
| } | ||||
|  |  | |||
|  | @ -250,6 +250,34 @@ contract AaveHelpers is Helper { | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function _TransferAtokensWithCollateral( | ||||
| 		uint256 _length, | ||||
| 		AaveInterface aave, | ||||
| 		ATokenInterface[] memory atokenContracts, | ||||
| 		uint256[] memory amts, | ||||
| 		address[] memory tokens, | ||||
| 		bool[] memory colEnable, | ||||
| 		address userAccount | ||||
| 	) internal { | ||||
| 		for (uint256 i = 0; i < _length; i++) { | ||||
| 			if (amts[i] > 0) { | ||||
| 				uint256 _amt = amts[i]; | ||||
| 				require( | ||||
| 					atokenContracts[i].transferFrom( | ||||
| 						userAccount, | ||||
| 						address(this), | ||||
| 						_amt | ||||
| 					), | ||||
| 					"allowance?" | ||||
| 				); | ||||
| 
 | ||||
| 				if (!getIsColl(tokens[i], address(this))) { | ||||
| 					aave.setUserUseReserveAsCollateral(tokens[i], colEnable[i]); | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	function _BorrowVariable( | ||||
| 		uint256 _length, | ||||
| 		AaveInterface aave, | ||||
|  |  | |||
|  | @ -91,6 +91,89 @@ contract AaveV3ImportResolver is AaveHelpers { | |||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	function _importAaveWithCollateral(address userAccount, ImportInputData memory inputData, bool[] memory enableCollateral) | ||||
| 		internal | ||||
| 		returns (string memory _eventName, bytes memory _eventParam) | ||||
| 	{ | ||||
| 		require( | ||||
| 			AccountInterface(address(this)).isAuth(userAccount), | ||||
| 			"user-account-not-auth" | ||||
| 		); | ||||
| 
 | ||||
| 		require(inputData.supplyTokens.length > 0, "0-length-not-allowed"); | ||||
| 		require(enableCollateral.length == inputData.supplyTokens.length, "lengths-not-same"); | ||||
| 
 | ||||
| 		ImportData memory data; | ||||
| 
 | ||||
| 		AaveInterface aave = AaveInterface(aaveProvider.getPool()); | ||||
| 
 | ||||
| 		data = getBorrowAmounts(userAccount, aave, inputData, data); | ||||
| 		data = getSupplyAmounts(userAccount, inputData, data); | ||||
| 
 | ||||
| 		//  payback borrowed amount; | ||||
| 		_PaybackStable( | ||||
| 			data._borrowTokens.length, | ||||
| 			aave, | ||||
| 			data._borrowTokens, | ||||
| 			data.stableBorrowAmts, | ||||
| 			userAccount | ||||
| 		); | ||||
| 		_PaybackVariable( | ||||
| 			data._borrowTokens.length, | ||||
| 			aave, | ||||
| 			data._borrowTokens, | ||||
| 			data.variableBorrowAmts, | ||||
| 			userAccount | ||||
| 		); | ||||
| 
 | ||||
| 		//  transfer atokens to this address; | ||||
| 		_TransferAtokensWithCollateral( | ||||
| 			data._supplyTokens.length, | ||||
| 			aave, | ||||
| 			data.aTokens, | ||||
| 			data.supplyAmts, | ||||
| 			data._supplyTokens, | ||||
| 			enableCollateral, | ||||
| 			userAccount | ||||
| 		); | ||||
| 
 | ||||
| 		// borrow assets after migrating position | ||||
| 		if (data.convertStable) { | ||||
| 			_BorrowVariable( | ||||
| 				data._borrowTokens.length, | ||||
| 				aave, | ||||
| 				data._borrowTokens, | ||||
| 				data.totalBorrowAmtsWithFee | ||||
| 			); | ||||
| 		} else { | ||||
| 			_BorrowStable( | ||||
| 				data._borrowTokens.length, | ||||
| 				aave, | ||||
| 				data._borrowTokens, | ||||
| 				data.stableBorrowAmtsWithFee | ||||
| 			); | ||||
| 			_BorrowVariable( | ||||
| 				data._borrowTokens.length, | ||||
| 				aave, | ||||
| 				data._borrowTokens, | ||||
| 				data.variableBorrowAmtsWithFee | ||||
| 			); | ||||
| 		} | ||||
| 
 | ||||
| 		_eventName = "LogAaveV3ImportWithCollateral(address,bool,address[],address[],uint256[],uint256[],uint256[],uint256[],bool[])"; | ||||
| 		_eventParam = abi.encode( | ||||
| 			userAccount, | ||||
| 			inputData.convertStable, | ||||
| 			inputData.supplyTokens, | ||||
| 			inputData.borrowTokens, | ||||
| 			inputData.flashLoanFees, | ||||
| 			data.supplyAmts, | ||||
| 			data.stableBorrowAmts, | ||||
| 			data.variableBorrowAmts, | ||||
| 			enableCollateral | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @dev Import aave V3 position . | ||||
| 	 * @notice Import EOA's aave V3 position to DSA's aave v3 position | ||||
|  | @ -104,8 +187,23 @@ contract AaveV3ImportResolver is AaveHelpers { | |||
| 	{ | ||||
| 		(_eventName, _eventParam) = _importAave(userAccount, inputData); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @dev Import aave V3 position (with collateral). | ||||
| 	 * @notice Import EOA's aave V3 position to DSA's aave v3 position | ||||
| 	 * @param userAccount The address of the EOA from which aave position will be imported | ||||
| 	 * @param inputData The struct containing all the neccessary input data | ||||
| 	 * @param enableCollateral The boolean array to enable selected collaterals in the imported position | ||||
| 	 */ | ||||
| 	function importAaveWithCollateral(address userAccount, ImportInputData memory inputData, bool[] memory enableCollateral) | ||||
| 		external | ||||
| 		payable | ||||
| 		returns (string memory _eventName, bytes memory _eventParam) | ||||
| 	{ | ||||
| 		(_eventName, _eventParam) = _importAaveWithCollateral(userAccount, inputData, enableCollateral); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| contract ConnectV2AaveV3ImportArbitrum is AaveV3ImportResolver { | ||||
| 	string public constant name = "Aave-v3-import-v1"; | ||||
| 	string public constant name = "Aave-v3-import-v1.1"; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Richa-iitr
						Richa-iitr