diff --git a/contracts/protocols/mainnet/NewLiquity.sol b/contracts/protocols/mainnet/NewLiquity.sol new file mode 100644 index 0000000..85dc912 --- /dev/null +++ b/contracts/protocols/mainnet/NewLiquity.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: MIT +pragma solidity >=0.6.0 <0.8.0; +pragma experimental ABIEncoderV2; + +import {DSMath} from "../libs/DSMath.sol"; +import { SafeMath } from "@openzeppelin/contracts/math/SafeMath.sol"; + +interface PriceFeedOracle { + function fetchPrice() external returns (uint256); +} + +interface TroveManagerLike { + + function getEntireDebtAndColl(address _borrower) + external + view + returns ( + uint256 debt, + uint256 coll, + uint256 pendingLUSDDebtReward, + uint256 pendingETHReward + ); +} + + +contract Helpers { + using DSMath for uint256; + TroveManagerLike internal constant troveManager = TroveManagerLike(0xA39739EF8b0231DbFA0DcdA07d7e29faAbCf4bb2); + + PriceFeedOracle internal constant priceFeedOracle = PriceFeedOracle(0x4c517D4e2C851CA76d7eC94B805269Df0f2201De); + + struct Trove { + uint256 collateral; + uint256 debt; + uint netValue; + } +} + +contract NewLiquityResolver is Helpers { + using DSMath for uint256; + + function fetchETHPrice() public returns (uint256) { + return priceFeedOracle.fetchPrice(); + } + + function getTrove(address[] memory owners) public returns (Trove[] memory) { + uint256 oracleEthPrice = fetchETHPrice(); + Trove[] memory troveArray = new Trove[](owners.length); + for (uint i = 0; i < owners.length; i++) { + (uint256 debt, uint256 collateral, , ) = troveManager.getEntireDebtAndColl(owners[i]); + uint netValue = SafeMath.sub(((collateral.wmul(oracleEthPrice)).wdiv(10**18)), debt); + troveArray[i] = Trove(collateral, debt, netValue); + } + return troveArray; + } +} \ No newline at end of file