mirror of
				https://github.com/Instadapp/yield-contract.git
				synced 2024-07-29 21:47:29 +00:00 
			
		
		
		
	Intgerated chainlink priceFeed in eth exchangeRate
This commit is contained in:
		
							parent
							
								
									052e05bc8d
								
							
						
					
					
						commit
						d4f9ccfc7b
					
				|  | @ -9,6 +9,8 @@ interface CTokenInterface { | ||||||
|     function exchangeRateCurrent() external returns (uint256); |     function exchangeRateCurrent() external returns (uint256); | ||||||
| 
 | 
 | ||||||
|     function balanceOf(address owner) external view returns (uint256); |     function balanceOf(address owner) external view returns (uint256); | ||||||
|  | 
 | ||||||
|  |     function underlying() external view returns (address); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| interface CompTroller { | interface CompTroller { | ||||||
|  | @ -28,7 +30,7 @@ interface CurveMapping { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| interface CurveRegistry { | interface CurveRegistry { | ||||||
|     function pool_list(uint) external view returns (address poolAddress, address poolToken, address ctokenPrice); |     function pool_list(uint) external view returns (address poolAddress, address poolToken); | ||||||
|     function pool_count() external view returns (uint); |     function pool_count() external view returns (uint); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -40,12 +42,20 @@ interface TokenInterface { | ||||||
|     function balanceOf(address owner) external view returns (uint256); |     function balanceOf(address owner) external view returns (uint256); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | interface PriceFeedInterface { | ||||||
|  |     function getPrices(address[] memory tokens) external view returns (uint256[] memory pricesInETH); | ||||||
|  |     function getPrice(address token) external view returns (uint256 priceInETH); | ||||||
|  |     function getEthPrice() external view returns (uint256 ethPriceUSD); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| contract EthRateLogic is DSMath { | contract EthRateLogic is DSMath { | ||||||
|     address public immutable poolToken; |     address public immutable poolToken; | ||||||
|     address public constant compTrollerAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); |     address public constant compTrollerAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); | ||||||
|     address public constant cethAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); |     address public constant cethAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); | ||||||
|  |     address public constant ethAddr = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; | ||||||
|     address public constant compOracleAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); |     address public constant compOracleAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); | ||||||
|  |     address public constant PriceFeedAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); | ||||||
|     address public constant ctokenMapping = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); |     address public constant ctokenMapping = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); | ||||||
|     address public constant curveRegistryAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); |     address public constant curveRegistryAddr = address(0xe81F70Cc7C0D46e12d70efc60607F16bbD617E88); | ||||||
| 
 | 
 | ||||||
|  | @ -53,11 +63,11 @@ contract EthRateLogic is DSMath { | ||||||
|         uint totalSupplyInETH; |         uint totalSupplyInETH; | ||||||
|         uint totalBorrowInETH; |         uint totalBorrowInETH; | ||||||
|         address[] memory allMarkets = CompTroller(compTrollerAddr).getAllMarkets(); |         address[] memory allMarkets = CompTroller(compTrollerAddr).getAllMarkets(); | ||||||
|         OracleComp oracleContract = OracleComp(compOracleAddr); |         PriceFeedInterface priceFeedContract = PriceFeedInterface(PriceFeedAddr); | ||||||
|         uint ethPrice = oracleContract.getUnderlyingPrice(cethAddr); |         // uint ethPrice = oracleContract.getUnderlyingPrice(cethAddr); | ||||||
|         for (uint i = 0; i < allMarkets.length; i++) { |         for (uint i = 0; i < allMarkets.length; i++) { | ||||||
|             CTokenInterface ctoken = CTokenInterface(allMarkets[i]); |             CTokenInterface ctoken = CTokenInterface(allMarkets[i]); | ||||||
|             uint tokenPriceInETH = wdiv(oracleContract.getUnderlyingPrice(address(ctoken)), ethPrice); |             uint tokenPriceInETH = priceFeedContract.getPrice(address(ctoken) == cethAddr ? ethAddr : ctoken.underlying()); | ||||||
|             uint supply = wmul(ctoken.balanceOf(_dsa), ctoken.exchangeRateCurrent()); |             uint supply = wmul(ctoken.balanceOf(_dsa), ctoken.exchangeRateCurrent()); | ||||||
|             uint supplyInETH = wmul(supply, tokenPriceInETH); |             uint supplyInETH = wmul(supply, tokenPriceInETH); | ||||||
| 
 | 
 | ||||||
|  | @ -70,18 +80,18 @@ contract EthRateLogic is DSMath { | ||||||
|         _netBal = sub(totalSupplyInETH, totalBorrowInETH); |         _netBal = sub(totalSupplyInETH, totalBorrowInETH); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function getCurveNetAssetsInEth(address _dsa) private returns (uint256 _netBal) { |     function getCurveNetAssetsInEth(address _dsa) private view returns (uint256 _netBal) { | ||||||
|  |         // NOTICE - only stable coins pool as of now | ||||||
|         CurveRegistry curveRegistry = CurveRegistry(curveRegistryAddr); |         CurveRegistry curveRegistry = CurveRegistry(curveRegistryAddr); | ||||||
|         uint poolLen = curveRegistry.pool_count(); |         uint poolLen = curveRegistry.pool_count(); | ||||||
|         OracleComp oracleContract = OracleComp(compOracleAddr); |         PriceFeedInterface priceFeedContract = PriceFeedInterface(PriceFeedAddr); | ||||||
|         uint ethPrice = oracleContract.getUnderlyingPrice(cethAddr); |         uint ethPriceUSD = priceFeedContract.getEthPrice(); | ||||||
|         for (uint i = 0; i < poolLen; i++) { |         for (uint i = 0; i < poolLen; i++) { | ||||||
|             (address curvePoolAddr, address curveTokenAddr, address ctokenPriceAddr) = curveRegistry.pool_list(i); |             (address curvePoolAddr, address curveTokenAddr) = curveRegistry.pool_list(i); | ||||||
|             uint tokenPriceInETH = wdiv(oracleContract.getUnderlyingPrice(address(ctokenPriceAddr)), ethPrice); |  | ||||||
|             uint virtualPrice = ICurve(curvePoolAddr).get_virtual_price(); |             uint virtualPrice = ICurve(curvePoolAddr).get_virtual_price(); | ||||||
|             uint curveTokenBal = TokenInterface(curveTokenAddr).balanceOf(_dsa); |             uint curveTokenBal = TokenInterface(curveTokenAddr).balanceOf(_dsa); | ||||||
|             uint amtInUSD = wmul(curveTokenBal, virtualPrice); |             uint amtInUSD = wmul(curveTokenBal, virtualPrice); | ||||||
|             uint amtInETH = wmul(amtInUSD, tokenPriceInETH); |             uint amtInETH = wmul(amtInUSD, ethPriceUSD); | ||||||
|             _netBal = add(_netBal, amtInETH); |             _netBal = add(_netBal, amtInETH); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Thrilok Kumar
						Thrilok Kumar