diff --git a/contracts/polygon/connectors/aave/v3/events.sol b/contracts/polygon/connectors/aave/v3/events.sol index 09c88ea7..b29b4425 100644 --- a/contracts/polygon/connectors/aave/v3/events.sol +++ b/contracts/polygon/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/polygon/connectors/aave/v3/main.sol b/contracts/polygon/connectors/aave/v3/main.sol index 4d454a3d..8d602561 100644 --- a/contracts/polygon/connectors/aave/v3/main.sol +++ b/contracts/polygon/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