diff --git a/contracts/views/EulerGeneralView.sol b/contracts/views/EulerGeneralView.sol index 1cf4d1fd..d39b30d2 100644 --- a/contracts/views/EulerGeneralView.sol +++ b/contracts/views/EulerGeneralView.sol @@ -8,12 +8,22 @@ import "../modules/EToken.sol"; import "../modules/Markets.sol"; import "../BaseIRMLinearKink.sol"; import "../vendor/RPow.sol"; +import "../IRiskManager.sol"; interface IExec { function getPriceFull(address underlying) external view returns (uint twap, uint twapPeriod, uint currPrice); function getPrice(address underlying) external view returns (uint twap, uint twapPeriod); function detailedLiquidity(address account) external view returns (IRiskManager.AssetLiquidity[] memory assets); function liquidity(address account) external view returns (IRiskManager.LiquidityStatus memory status); + function getRiskManagerSettings() external view returns (IRiskManager.RiskManagerSettings memory settings); +} + +interface IInstaller { + function getUpgradeAdmin() external view returns (address); +} + +interface IGovernance { + function getGovernorAdmin() external view returns (address); } contract EulerGeneralView is Constants { @@ -84,10 +94,45 @@ contract EulerGeneralView is Constants { address[] enteredMarkets; } + struct ResponseModule { + uint moduleId; + address proxyAddress; + } + + struct ResponseConfig { + uint defaultReserveFee; + uint defaultTWAPWindowSeconds; + uint defaultBorrowFactor; + address upgradeAdmin; + address governorAdmin; + IRiskManager.RiskManagerSettings riskManagerSettings; + + ResponseModule[] modules; + } // Implementation + function doQueryEulerConfig(address eulerContract) external view returns (ResponseConfig memory r) { + r.defaultReserveFee = DEFAULT_RESERVE_FEE; + r.defaultTWAPWindowSeconds = DEFAULT_TWAP_WINDOW_SECONDS; + r.defaultBorrowFactor = DEFAULT_BORROW_FACTOR; + r.modules = new ResponseModule[](7); + + Euler eulerProxy = Euler(eulerContract); + r.modules[0] = ResponseModule(MODULEID__INSTALLER, eulerProxy.moduleIdToProxy(MODULEID__INSTALLER)); + r.modules[1] = ResponseModule(MODULEID__MARKETS, eulerProxy.moduleIdToProxy(MODULEID__MARKETS)); + r.modules[2] = ResponseModule(MODULEID__LIQUIDATION, eulerProxy.moduleIdToProxy(MODULEID__LIQUIDATION)); + r.modules[3] = ResponseModule(MODULEID__GOVERNANCE, eulerProxy.moduleIdToProxy(MODULEID__GOVERNANCE)); + r.modules[4] = ResponseModule(MODULEID__EXEC, eulerProxy.moduleIdToProxy(MODULEID__EXEC)); + r.modules[5] = ResponseModule(MODULEID__SWAP, eulerProxy.moduleIdToProxy(MODULEID__SWAP)); + r.modules[6] = ResponseModule(MODULEID__SWAPHUB, eulerProxy.moduleIdToProxy(MODULEID__SWAPHUB)); + + r.upgradeAdmin = IInstaller(r.modules[0].proxyAddress).getUpgradeAdmin(); + r.governorAdmin = IGovernance(r.modules[3].proxyAddress).getGovernorAdmin(); + r.riskManagerSettings = IExec(r.modules[4].proxyAddress).getRiskManagerSettings(); + } + function doQueryBatch(Query[] memory qs) external view returns (Response[] memory r) { r = new Response[](qs.length);