Renaming, Maker -> Reflexer

This commit is contained in:
Guillaume Felley 2021-03-26 14:34:54 +01:00
parent 95aaf9f0ba
commit d649cb68b7

View File

@ -6,49 +6,45 @@ pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2; pragma experimental ABIEncoderV2;
interface ManagerLike { interface ManagerLike {
function ilks(uint) external view returns (bytes32); function collateralTypes(uint) external view returns (bytes32);
function owns(uint) external view returns (address); function ownsSAFE(uint) external view returns (address);
function urns(uint) external view returns (address); function safes(uint) external view returns (address);
function vat() external view returns (address); function safeEngine() external view returns (address);
} }
interface CdpsLike { interface GetSafesLike {
function getCdpsAsc(address, address) external view returns (uint[] memory, address[] memory, bytes32[] memory); function getSafesAsc(address, address) external view returns (uint[] memory, address[] memory, bytes32[] memory);
} }
interface VatLike { interface SAFEEngineLike {
function ilks(bytes32) external view returns (uint, uint, uint, uint, uint); function collateralTypes(bytes32) external view returns (uint, uint, uint, uint, uint);
function dai(address) external view returns (uint); function coinBalance(address) external view returns (uint);
function urns(bytes32, address) external view returns (uint, uint); function safes(bytes32, address) external view returns (uint, uint);
function gem(bytes32, address) external view returns (uint); function tokenCollateral(bytes32, address) external view returns (uint);
} }
interface JugLike { interface TaxCollectorLike {
function ilks(bytes32) external view returns (uint, uint); function collateralTypes(bytes32) external view returns (uint, uint);
function base() external view returns (uint); function globalStabilityFee() external view returns (uint);
} }
interface PotLike { interface OracleRelayerLike {
function dsr() external view returns (uint); function collateralTypes(bytes32) external view returns (OracleLike, uint, uint);
function pie(address) external view returns (uint); function redemptionRate() external view returns (uint);
function chi() external view returns (uint);
} }
interface SpotLike { interface OracleLike {
function ilks(bytes32) external view returns (PipLike, uint); function getResultWithValidity() external view returns (bytes32, bool);
} }
interface PipLike { interface InstaReflexerAddress {
function peek() external view returns (bytes32, bool);
}
interface InstaMcdAddress {
function manager() external view returns (address); function manager() external view returns (address);
function vat() external view returns (address); function safeEngine() external view returns (address);
function jug() external view returns (address); function taxCollector() external view returns (address);
function spot() external view returns (address); function oracleRelayer() external view returns (address);
function GetSafes() external view returns (address);
function pot() external view returns (address); function pot() external view returns (address);
function getCdps() external view returns (address);
} }
@ -92,22 +88,23 @@ contract Helpers is DSMath {
/** /**
* @dev get MakerDAO MCD Address contract * @dev get MakerDAO MCD Address contract
*/ */
function getMcdAddresses() public pure returns (address) { function getReflexerAddresses() public pure returns (address) {
return 0xF23196DF1C440345DE07feFbe556a5eF0dcD29F0; // TODO: Set the actual Reflexer address getter contract
return 0x0000000000000000000000000000000000000000;
} }
struct VaultData { struct SafeData {
uint id; uint id;
address owner; address owner;
string colType; string colType;
uint collateral; uint collateral;
uint art;
uint debt; uint debt;
uint adjustedDebt;
uint liquidatedCol; uint liquidatedCol;
uint borrowRate; uint borrowRate;
uint colPrice; uint colPrice;
uint liquidationRatio; uint liquidationRatio;
address vaultAddress; address safeAddress;
} }
struct ColInfo { struct ColInfo {
@ -149,102 +146,102 @@ contract Helpers is DSMath {
} }
function getFee(bytes32 ilk) internal view returns (uint fee) { function getFee(bytes32 collateralType) internal view returns (uint fee) {
address jug = InstaMcdAddress(getMcdAddresses()).jug(); address taxCollector = InstaReflexerAddress(getReflexerAddresses()).taxCollector();
(uint duty,) = JugLike(jug).ilks(ilk); (uint stabilityFee,) = TaxCollectorLike(taxCollector).collateralTypes(collateralType);
uint base = JugLike(jug).base(); uint globalStabilityFee = TaxCollectorLike(taxCollector).globalStabilityFee();
fee = add(duty, base); fee = add(stabilityFee, globalStabilityFee);
} }
function getColPrice(bytes32 ilk) internal view returns (uint price) { function getColPrice(bytes32 collateralType) internal view returns (uint price) {
address spot = InstaMcdAddress(getMcdAddresses()).spot(); address oracleRelayer = InstaReflexerAddress(getReflexerAddresses()).oracleRelayer();
address vat = InstaMcdAddress(getMcdAddresses()).vat(); address safeEngine = InstaReflexerAddress(getReflexerAddresses()).safeEngine();
(, uint mat) = SpotLike(spot).ilks(ilk); (, uint safetyCRatio,) = OracleRelayerLike(oracleRelayer).collateralTypes(collateralType);
(,,uint spotPrice,,) = VatLike(vat).ilks(ilk); (,,uint spotPrice,,) = SAFEEngineLike(safeEngine).collateralTypes(collateralType);
price = rmul(mat, spotPrice); price = rmul(safetyCRatio, spotPrice);
} }
function getColRatio(bytes32 ilk) internal view returns (uint ratio) { function getColRatio(bytes32 collateralType) internal view returns (uint ratio) {
address spot = InstaMcdAddress(getMcdAddresses()).spot(); address oracleRelayer = InstaReflexerAddress(getReflexerAddresses()).oracleRelayer();
(, ratio) = SpotLike(spot).ilks(ilk); (, ratio,) = OracleRelayerLike(oracleRelayer).collateralTypes(collateralType);
} }
function getDebtCeiling(bytes32 ilk) internal view returns (uint debtCeiling, uint totalDebt) { function getDebtCeiling(bytes32 collateralType) internal view returns (uint debtCeiling, uint totalDebt) {
address vat = InstaMcdAddress(getMcdAddresses()).vat(); address safeEngine = InstaReflexerAddress(getReflexerAddresses()).safeEngine();
(uint totalArt,uint rate,,uint debtCeilingRad,) = VatLike(vat).ilks(ilk); (uint globalDebt,uint rate,,uint debtCeilingRad,) = SAFEEngineLike(safeEngine).collateralTypes(collateralType);
debtCeiling = debtCeilingRad / 10 ** 45; debtCeiling = debtCeilingRad / 10 ** 45;
totalDebt = rmul(totalArt, rate); totalDebt = rmul(globalDebt, rate);
} }
} }
contract VaultResolver is Helpers { contract SafeResolver is Helpers {
function getVaults(address owner) external view returns (VaultData[] memory) { function getSafes(address owner) external view returns (SafeData[] memory) {
address manager = InstaMcdAddress(getMcdAddresses()).manager(); address manager = InstaReflexerAddress(getReflexerAddresses()).manager();
address cdpManger = InstaMcdAddress(getMcdAddresses()).getCdps(); address safeManger = InstaReflexerAddress(getReflexerAddresses()).GetSafes();
(uint[] memory ids, address[] memory urns, bytes32[] memory ilks) = CdpsLike(cdpManger).getCdpsAsc(manager, owner); (uint[] memory ids, address[] memory handlers, bytes32[] memory collateralTypes) = GetSafesLike(safeManger).getSafesAsc(manager, owner);
VaultData[] memory vaults = new VaultData[](ids.length); SafeData[] memory safes = new SafeData[](ids.length);
for (uint i = 0; i < ids.length; i++) { for (uint i = 0; i < ids.length; i++) {
(uint ink, uint art) = VatLike(ManagerLike(manager).vat()).urns(ilks[i], urns[i]); (uint collateral, uint debt) = SAFEEngineLike(ManagerLike(manager).safeEngine()).safes(collateralTypes[i], handlers[i]);
(,uint rate, uint priceMargin,,) = VatLike(ManagerLike(manager).vat()).ilks(ilks[i]); (,uint rate, uint priceMargin,,) = SAFEEngineLike(ManagerLike(manager).safeEngine()).collateralTypes(collateralTypes[i]);
uint mat = getColRatio(ilks[i]); uint safetyCRatio = getColRatio(collateralTypes[i]);
vaults[i] = VaultData( safes[i] = SafeData(
ids[i], ids[i],
owner, owner,
bytes32ToString(ilks[i]), bytes32ToString(collateralTypes[i]),
ink, collateral,
art, debt,
rmul(art,rate), rmul(debt,rate),
VatLike(ManagerLike(manager).vat()).gem(ilks[i], urns[i]), SAFEEngineLike(ManagerLike(manager).safeEngine()).tokenCollateral(collateralTypes[i], handlers[i]),
getFee(ilks[i]), getFee(collateralTypes[i]),
rmul(priceMargin, mat), rmul(priceMargin, safetyCRatio),
mat, safetyCRatio,
urns[i] handlers[i]
); );
} }
return vaults; return safes;
} }
function getVaultById(uint id) external view returns (VaultData memory) { function getSafeById(uint id) external view returns (SafeData memory) {
address manager = InstaMcdAddress(getMcdAddresses()).manager(); address manager = InstaReflexerAddress(getReflexerAddresses()).manager();
address urn = ManagerLike(manager).urns(id); address handler = ManagerLike(manager).safes(id);
bytes32 ilk = ManagerLike(manager).ilks(id); bytes32 collateralType = ManagerLike(manager).collateralTypes(id);
(uint ink, uint art) = VatLike(ManagerLike(manager).vat()).urns(ilk, urn); (uint collateral, uint debt) = SAFEEngineLike(ManagerLike(manager).safeEngine()).safes(collateralType, handler);
(,uint rate, uint priceMargin,,) = VatLike(ManagerLike(manager).vat()).ilks(ilk); (,uint rate, uint priceMargin,,) = SAFEEngineLike(ManagerLike(manager).safeEngine()).collateralTypes(collateralType);
uint mat = getColRatio(ilk); uint safetyCRatio = getColRatio(collateralType);
uint feeRate = getFee(ilk); uint feeRate = getFee(collateralType);
VaultData memory vault = VaultData( SafeData memory safe = SafeData(
id, id,
ManagerLike(manager).owns(id), ManagerLike(manager).ownsSAFE(id),
bytes32ToString(ilk), bytes32ToString(collateralType),
ink, collateral,
art, debt,
rmul(art,rate), rmul(debt,rate),
VatLike(ManagerLike(manager).vat()).gem(ilk, urn), SAFEEngineLike(ManagerLike(manager).safeEngine()).tokenCollateral(collateralType, handler),
feeRate, feeRate,
rmul(priceMargin, mat), rmul(priceMargin, safetyCRatio),
mat, safetyCRatio,
urn handler
); );
return vault; return safe;
} }
function getColInfo(string[] memory name) public view returns (ColInfo[] memory) { function getColInfo(string[] memory name) public view returns (ColInfo[] memory) {
ColInfo[] memory colInfo = new ColInfo[](name.length); ColInfo[] memory colInfo = new ColInfo[](name.length);
for (uint i = 0; i < name.length; i++) { for (uint i = 0; i < name.length; i++) {
bytes32 ilk = stringToBytes32(name[i]); bytes32 collateralType = stringToBytes32(name[i]);
(uint debtCeiling, uint totalDebt) = getDebtCeiling(ilk); (uint debtCeiling, uint totalDebt) = getDebtCeiling(collateralType);
colInfo[i] = ColInfo( colInfo[i] = ColInfo(
getFee(ilk), getFee(collateralType),
getColPrice(ilk), getColPrice(collateralType),
getColRatio(ilk), getColRatio(collateralType),
debtCeiling, debtCeiling,
totalDebt totalDebt
); );
@ -255,22 +252,14 @@ contract VaultResolver is Helpers {
} }
contract DSRResolver is VaultResolver { contract RedemptionRateResolver is SafeResolver {
function getDsrRate() public view returns (uint dsr) { function getRedemtpionRate() external view returns (uint redemptionRate) {
address pot = InstaMcdAddress(getMcdAddresses()).pot(); address oracleRelayer = InstaReflexerAddress(getReflexerAddresses()).oracleRelayer();
dsr = PotLike(pot).dsr(); redemptionRate = OracleRelayerLike(oracleRelayer).redemptionRate();
}
function getDaiPosition(address owner) external view returns (uint amt, uint dsr) {
address pot = InstaMcdAddress(getMcdAddresses()).pot();
uint chi = PotLike(pot).chi();
uint pie = PotLike(pot).pie(owner);
amt = rmul(pie,chi);
dsr = getDsrRate();
} }
} }
contract InstaMakerResolver is DSRResolver { contract InstaReflexerResolver is RedemptionRateResolver {
string public constant name = "Maker-Resolver-v1.2"; string public constant name = "Reflexer-Resolver-v1";
} }