/ contracts / finance / rehypothecation / BaseRehypothecationManager.sol
BaseRehypothecationManager.sol
 1  pragma solidity >=0.6.0;
 2  pragma experimental ABIEncoderV2;
 3  
 4  import "../../deployment/Deployer.sol";
 5  import "../../deployment/ManagedContract.sol";
 6  import "../../interfaces/IProtocolSettings.sol";
 7  import "../../interfaces/IBaseRehypothecationManager.sol";
 8  import "../../interfaces/ICreditProvider.sol";
 9  import "../../interfaces/ICreditToken.sol";
10  import "../../interfaces/IOptionsExchange.sol";
11  import "../../interfaces/IUnderlyingVault.sol";
12  import "../../utils/MoreMath.sol";
13  import "../../utils/SafeERC20.sol";
14  import "../../utils/SafeCast.sol";
15  
16  abstract contract BaseRehypothecationManager is ManagedContract, IBaseRehypothecationManager {
17  	using SafeERC20 for IERC20_2;
18      using SafeCast for uint;
19      using SafeMath for uint;
20      using SignedSafeMath for int;
21  
22      IProtocolSettings internal settings;
23      ICreditProvider internal creditProvider;
24      ICreditToken internal creditToken;
25      IOptionsExchange internal exchange;
26      IUnderlyingVault internal vault;
27  
28      function initialize(Deployer deployer) virtual override internal {
29          creditProvider = ICreditProvider(deployer.getContractAddress("CreditProvider"));
30          creditToken = ICreditToken(deployer.getContractAddress("CreditToken"));
31          settings = IProtocolSettings(deployer.getContractAddress("ProtocolSettings"));
32          exchange = IOptionsExchange(deployer.getContractAddress("OptionsExchange"));
33          vault = IUnderlyingVault(deployer.getContractAddress("UnderlyingVault"));
34  
35      }
36      function notionalExposure(address account, address asset, address collateral) virtual override external view returns (uint256);
37      function borrowExposure(address account, address asset, address collateral) virtual override external view returns (uint256);
38      function lend(address asset, address collateral, uint assetAmount, uint collateralAmount, address udlFeed) virtual override external;
39      function withdraw(address asset, address collateral, uint amount) virtual override external;
40      function borrow(address asset, address collateral, uint assetAmount, uint collateralAmount, address udlFeed) virtual override external;
41      function repay(address asset, address collateral, address udlFeed) virtual override external;
42      function transferTokensToCreditProvider(address tokenAddr) virtual override external;
43      function transferTokensToVault(address tokenAddr) virtual override external;
44  }