From e4ec3db116b8c076adc798c9afc81765d1f0ea12 Mon Sep 17 00:00:00 2001
From: pradyuman-verma <pradyumnverma27@gmail.com>
Date: Sun, 10 Apr 2022 17:57:02 +0530
Subject: [PATCH] added disable collateral optimism

---
 .../optimism/connectors/aave/v3/events.sol    |  1 +
 .../optimism/connectors/aave/v3/main.sol      | 26 +++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/contracts/optimism/connectors/aave/v3/events.sol b/contracts/optimism/connectors/aave/v3/events.sol
index 09c88ea7..b29b4425 100644
--- a/contracts/optimism/connectors/aave/v3/events.sol
+++ b/contracts/optimism/connectors/aave/v3/events.sol
@@ -29,6 +29,7 @@ contract Events {
 		uint256 setId
 	);
 	event LogEnableCollateral(address[] tokens);
+	event LogDisableCollateral(address[] tokens);
 	event LogSwapRateMode(address indexed token, uint256 rateMode);
 	event LogSetUserEMode(uint8 categoryId);
 }
diff --git a/contracts/optimism/connectors/aave/v3/main.sol b/contracts/optimism/connectors/aave/v3/main.sol
index 2beb8e67..da927eee 100644
--- a/contracts/optimism/connectors/aave/v3/main.sol
+++ b/contracts/optimism/connectors/aave/v3/main.sol
@@ -251,6 +251,32 @@ abstract contract AaveResolver is Events, Helpers {
 		_eventParam = abi.encode(tokens);
 	}
 
+	/**
+	 * @dev Disable collateral
+	 * @notice Disable an array of tokens as collateral
+	 * @param tokens Array of tokens to disable as collateral
+	 */
+	function disableCollateral(address[] calldata tokens)
+		external
+		payable
+		returns (string memory _eventName, bytes memory _eventParam)
+	{
+		uint256 _length = tokens.length;
+		require(_length > 0, "0-tokens-not-allowed");
+
+		AaveInterface aave = AaveInterface(aaveProvider.getPool());
+
+		for (uint256 i = 0; i < _length; i++) {
+			address token = tokens[i];
+			if (getCollateralBalance(token) > 0 && getIsColl(token)) {
+				aave.setUserUseReserveAsCollateral(token, false);
+			}
+		}
+
+		_eventName = "LogDisableCollateral(address[])";
+		_eventParam = abi.encode(tokens);
+	}
+
 	/**
 	 * @dev Swap borrow rate mode
 	 * @notice Swaps user borrow rate mode between variable and stable