Skip to content

Commit

Permalink
check hypervisor data corresponds to the token data
Browse files Browse the repository at this point in the history
  • Loading branch information
ewansheldon committed Jan 9, 2025
1 parent cd6bd7c commit 7346460
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 8 deletions.
24 changes: 16 additions & 8 deletions contracts/AutoRedemption.sol
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ import {AutomationCompatibleInterface} from
"@chainlink/contracts/src/v0.8/automation/interfaces/AutomationCompatibleInterface.sol";
import {ConfirmedOwner} from "@chainlink/contracts/src/v0.8/shared/access/ConfirmedOwner.sol";
import {IRedeemable} from "contracts/interfaces/IRedeemable.sol";
import {ISmartVaultManager} from "contracts/interfaces/ISmartVaultManager.sol";
import {ISmartVault} from "contracts/interfaces/ISmartVault.sol";
import {ISmartVaultManager} from "contracts/interfaces/ISmartVaultManager.sol";
import {ISmartVaultYieldManager} from "contracts/interfaces/ISmartVaultYieldManager.sol";
import {IUniswapV3Pool} from "contracts/interfaces/IUniswapV3Pool.sol";
import {IQuoter} from "contracts/interfaces/IQuoter.sol";
import {LiquidityMath} from "src/uniswap/LiquidityMath.sol";
Expand All @@ -28,6 +29,7 @@ contract AutoRedemption is AutomationCompatibleInterface, FunctionsClient, Confi
bytes32 private lastRequestId;
bytes32 private immutable donID;
address private immutable smartVaultManager;
address private immutable yieldManager;
IUniswapV3Pool private immutable pool;
address private immutable swapRouter;
address private immutable quoter;
Expand All @@ -48,6 +50,7 @@ contract AutoRedemption is AutomationCompatibleInterface, FunctionsClient, Confi

constructor(
address _smartVaultManager,
address _yieldManager,
address _functionsRouter,
bytes32 _donID,
address _pool,
Expand All @@ -58,6 +61,7 @@ contract AutoRedemption is AutomationCompatibleInterface, FunctionsClient, Confi
uint256 _lastLegacyVaultID
) FunctionsClient(_functionsRouter) ConfirmedOwner(msg.sender) {
smartVaultManager = _smartVaultManager;
yieldManager = _yieldManager;
donID = _donID;
swapRouter = _swapRouter;
quoter = _quoter;
Expand Down Expand Up @@ -145,14 +149,18 @@ contract AutoRedemption is AutomationCompatibleInterface, FunctionsClient, Confi
} catch {}
}

function validData(ISmartVaultManager.SmartVaultData memory _vaultData, address _token) private returns (bool) {
function validData(ISmartVaultManager.SmartVaultData memory _vaultData, address _token, address _hypervisor)
private
returns (bool)
{
if (_vaultData.status.vaultAddress == address(0)) return false;
for (uint256 i = 0; i < _vaultData.status.collateral.length; i++) {
if (_vaultData.status.collateral[i].token.addr == _token) return true;
}
ISmartVault.YieldPair[] memory _yieldPairs = ISmartVault(_vaultData.status.vaultAddress).yieldAssets();
for (uint256 i = 0; i < _yieldPairs.length; i++) {
if (_yieldPairs[i].hypervisor == _token) return true;
if (_vaultData.status.collateral[i].token.addr == _token) {
return (
_hypervisor == address(0)
|| ISmartVaultYieldManager(yieldManager).getHypervisorForCollateral(_token) == _hypervisor
);
}
}
}

Expand All @@ -166,7 +174,7 @@ contract AutoRedemption is AutomationCompatibleInterface, FunctionsClient, Confi
try ISmartVaultManager(smartVaultManager).vaultData(_tokenID) returns (
ISmartVaultManager.SmartVaultData memory _vaultData
) {
if (validData(_vaultData, _token)) {
if (validData(_vaultData, _token, _hypervisor)) {
if (_USDsTargetAmount > _vaultData.status.minted) _USDsTargetAmount = _vaultData.status.minted;
_smartVault = _vaultData.status.vaultAddress;
if (_tokenID <= lastLegacyVaultID) {
Expand Down
4 changes: 4 additions & 0 deletions contracts/SmartVaultYieldManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,10 @@ contract SmartVaultYieldManager is ISmartVaultYieldManager, Ownable {
IERC20(_token).safeTransfer(msg.sender, _withdrawn);
}

function getHypervisorForCollateral(address _collateralToken) external returns (address _hypervisor) {
return hypervisorData[_collateralToken].hypervisor;
}

function addHypervisorData(
address _collateralToken,
address _hypervisor,
Expand Down
1 change: 1 addition & 0 deletions contracts/interfaces/ISmartVaultYieldManager.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
pragma solidity 0.8.21;

interface ISmartVaultYieldManager {
function getHypervisorForCollateral(address _collateralToken) external returns (address _hypervisor);
function deposit(address _collateralToken, uint256 _usdPercentage)
external
returns (address vault0, address vault1);
Expand Down

0 comments on commit 7346460

Please sign in to comment.