Added mcd addresses interface

This commit is contained in:
Thrilok Kumar 2019-11-16 03:29:25 +05:30
parent 2859df8d21
commit c642c8ddc5

View File

@ -73,23 +73,25 @@ interface OtcInterface {
) external; ) external;
} }
interface GemLike {
function approve(address, uint) external;
function transfer(address, uint) external;
function transferFrom(address, address, uint) external;
function deposit() external payable;
function withdraw(uint) external;
}
interface ManagerLike { interface ManagerLike {
function cdpCan(address, uint, address) external view returns (uint); function cdpCan(address, uint, address) external view returns (uint);
function ilks(uint) external view returns (bytes32); function ilks(uint) external view returns (bytes32);
function owns(uint) external view returns (address); function owns(uint) external view returns (address);
function urns(uint) external view returns (address); function urns(uint) external view returns (address);
function vat() external view returns (address); function vat() external view returns (address);
function open(bytes32) external returns (uint); function open(bytes32, address) external returns (uint);
function give(uint, address) external; function give(uint, address) external;
function cdpAllow(uint, address, uint) external; function cdpAllow(uint, address, uint) external;
function urnAllow(address, uint) external; function urnAllow(address, uint) external;
function frob(uint, int, int) external; function frob(uint, int, int) external;
function frob(
uint,
address,
int,
int
) external;
function flux(uint, address, uint) external; function flux(uint, address, uint) external;
function move(uint, address, uint) external; function move(uint, address, uint) external;
function exit( function exit(
@ -103,6 +105,43 @@ interface ManagerLike {
function shift(uint, uint) external; function shift(uint, uint) external;
} }
interface InstaMcdAddress {
function manager() external returns (address);
function dai() external returns (address);
function daiJoin() external returns (address);
function vat() external returns (address);
function jug() external returns (address);
function cat() external returns (address);
function gov() external returns (address);
function adm() external returns (address);
function vow() external returns (address);
function spot() external returns (address);
function pot() external returns (address);
function esm() external returns (address);
function mcdFlap() external returns (address);
function mcdFlop() external returns (address);
function mcdDeploy() external returns (address);
function mcdEnd() external returns (address);
function proxyActions() external returns (address);
function proxyActionsEnd() external returns (address);
function proxyActionsDsr() external returns (address);
function getCdps() external returns (address);
function saiTub() external returns (address);
function weth() external returns (address);
function bat() external returns (address);
function sai() external returns (address);
function ethAJoin() external returns (address);
function ethAFlip() external returns (address);
function batAJoin() external returns (address);
function batAFlip() external returns (address);
function ethPip() external returns (address);
function batAPip() external returns (address);
function saiJoin() external returns (address);
function saiFlip() external returns (address);
function saiPip() external returns (address);
function migration() external returns (address payable);
}
contract DSMath { contract DSMath {
@ -149,6 +188,13 @@ contract Helpers is DSMath {
sai = 0x448a5065aeBB8E423F0896E6c5D525C040f59af3; sai = 0x448a5065aeBB8E423F0896E6c5D525C040f59af3;
} }
/**
* @dev get MakerDAO MCD Address contract
*/
function getMcdAddresses() public pure returns (address mcd) {
mcd = 0x448a5065aeBB8E423F0896E6c5D525C040f59af3; // Check Thrilok - add addr at time of deploy
}
/** /**
* @dev get Sai (Dai v1) address * @dev get Sai (Dai v1) address
*/ */
@ -170,20 +216,6 @@ contract Helpers is DSMath {
otcAddr = 0x39755357759cE0d7f32dC8dC45414CCa409AE24e; // main otcAddr = 0x39755357759cE0d7f32dC8dC45414CCa409AE24e; // main
} }
/**
* @dev get uniswap MKR exchange
*/
function getUniswapMKRExchange() public pure returns (address ume) {
ume = 0x2C4Bd064b998838076fa341A83d007FC2FA50957;
}
/**
* @dev get uniswap factory
*/
function getUniswapFactory() public pure returns (address addr) {
addr = 0xc0a47dFe034B400B47bDaD5FecDa2621de6c4d95;
}
/** /**
* @dev get InstaDApp Liquidity Address * @dev get InstaDApp Liquidity Address
*/ */
@ -263,21 +295,17 @@ contract MKRSwapper is LiquidityResolver {
contract SCDResolver is MKRSwapper { contract SCDResolver is MKRSwapper {
function getFeeOfCdp(bytes32 cup, uint _wad) internal returns (uint feeAmt) { function getFeeOfCdp(bytes32 cup, uint _wad) internal returns (uint feeAmt) {
// Set ratio according to user.
TubInterface tub = TubInterface(getSaiTubAddress()); TubInterface tub = TubInterface(getSaiTubAddress());
(bytes32 val, bool ok) = tub.pep().peek(); (bytes32 val, bool ok) = tub.pep().peek();
TokenInterface mkr = TubInterface(getSaiTubAddress()).gov(); TokenInterface mkr = TubInterface(getSaiTubAddress()).gov();
feeAmt = 0; feeAmt = 0;
// wad according to toConvert ratio
if (ok && val != 0) { if (ok && val != 0) {
// MKR required for wipe = Stability fees accrued in Dai / MKRUSD value // MKR required for wipe = Stability fees accrued in Dai / MKRUSD value
uint mkrFee = rdiv(tub.rap(cup), tub.tab(cup)); uint mkrFee = rdiv(tub.rap(cup), tub.tab(cup));
mkrFee = rmul(_wad, mkrFee); mkrFee = rmul(_wad, mkrFee);
mkrFee = wdiv(mkrFee, uint(val)); mkrFee = wdiv(mkrFee, uint(val));
// convert mkr amount into sai amount
feeAmt = OtcInterface(getOtcAddress()).getPayAmount(getSaiAddress(), address(mkr), mkrFee); feeAmt = OtcInterface(getOtcAddress()).getPayAmount(getSaiAddress(), address(mkr), mkrFee);
} }
@ -346,11 +374,11 @@ contract SCDResolver is MKRSwapper {
contract MCDResolver is SCDResolver { contract MCDResolver is SCDResolver {
function migrateToMCD( function migrateToMCD(
address payable scdMcdMigration, // Migration contract address
bytes32 cup, // SCD CDP Id to migrate bytes32 cup, // SCD CDP Id to migrate
address payGem // Token address address payGem // Token address
) internal returns (uint cdp) ) internal returns (uint cdp)
{ {
address payable scdMcdMigration = InstaMcdAddress(getMcdAddresses()).migration();
TubInterface tub = TubInterface(getSaiTubAddress()); TubInterface tub = TubInterface(getSaiTubAddress());
tub.give(cup, address(scdMcdMigration)); tub.give(cup, address(scdMcdMigration));
@ -362,10 +390,10 @@ contract MCDResolver is SCDResolver {
if (govFee > 0) { if (govFee > 0) {
if (payGem != address(0)) { if (payGem != address(0)) {
swapToMkrOtc(payGem, govFee); swapToMkrOtc(payGem, govFee);
require(tub.gov().transfer(address(scdMcdMigration), govFee), "transfer-failed");
} else { } else {
require(tub.gov().transferFrom(msg.sender, address(this), govFee), "transfer-failed"); // Check Samyak - We can directly transfer MKR to address(scdMcdMigration). Right? require(tub.gov().transferFrom(msg.sender, address(scdMcdMigration), govFee), "transfer-failed"); // Check Thrilok - is it working => We can directly transfer MKR to address(scdMcdMigration). Right?
} }
require(tub.gov().transfer(address(scdMcdMigration), govFee), "transfer-failed");
} }
} }
// Execute migrate function // Execute migrate function
@ -373,20 +401,20 @@ contract MCDResolver is SCDResolver {
} }
function giveCDP( function giveCDP(
address manager,
uint cdp, uint cdp,
address nextOwner address nextOwner
) internal ) internal
{ {
address manager = InstaMcdAddress(getMcdAddresses()).manager();
ManagerLike(manager).give(cdp, nextOwner); ManagerLike(manager).give(cdp, nextOwner);
} }
function shiftCDP( function shiftCDP(
address manager,
uint cdpSrc, uint cdpSrc,
uint cdpOrg uint cdpOrg
) internal ) internal
{ {
address manager = InstaMcdAddress(getMcdAddresses()).manager();
require(ManagerLike(manager).owns(cdpOrg) == address(this), "NOT-OWNER"); require(ManagerLike(manager).owns(cdpOrg) == address(this), "NOT-OWNER");
ManagerLike(manager).shift(cdpSrc, cdpOrg); ManagerLike(manager).shift(cdpSrc, cdpOrg);
} }
@ -442,7 +470,7 @@ contract MigrateHelper is MCDResolver {
uint initialPoolBal = sub(getPoolAddress().balance, 10000000000); uint initialPoolBal = sub(getPoolAddress().balance, 10000000000);
// Check if the split fee is paid by debt from the cdp. // Check if the split fee is paid by debt from the cdp.
uint _wadForDebt = payFeeWith == getSaiAddress() ? add(_wad, getFeeOfCdp(scdCup, _wad)) : _wad; // Check Thrilok - gas fee; uint _wadForDebt = payFeeWith == getSaiAddress() ? add(_wad, getFeeOfCdp(scdCup, _wad)) : _wad;
//fetch liquidity from InstaDApp Pool. //fetch liquidity from InstaDApp Pool.
getLiquidity(_wadForDebt); getLiquidity(_wadForDebt);
@ -479,10 +507,7 @@ contract MigrateResolver is MigrateHelper {
uint scdCDP, uint scdCDP,
uint mergeCDP, uint mergeCDP,
uint toConvert, uint toConvert,
address payFeeWith, address payFeeWith
address payable scdMcdMigration,
address manager,
address daiJoin
) external payable returns (uint newMcdCdp) ) external payable returns (uint newMcdCdp)
{ {
bytes32 scdCup = bytes32(scdCDP); bytes32 scdCup = bytes32(scdCDP);
@ -499,7 +524,7 @@ contract MigrateResolver is MigrateHelper {
scdCup, scdCup,
toConvert, toConvert,
payFeeWith, payFeeWith,
daiJoin); InstaMcdAddress(getMcdAddresses()).saiJoin());
//split the assets into split cdp. //split the assets into split cdp.
splitCdp( splitCdp(
@ -511,10 +536,10 @@ contract MigrateResolver is MigrateHelper {
); );
//migrate the split cdp. //migrate the split cdp.
newMcdCdp = migrateToMCD(scdMcdMigration, splitCup, payFeeWith); newMcdCdp = migrateToMCD(splitCup, payFeeWith);
} else { } else {
//migrate the scd cdp. //migrate the scd cdp.
newMcdCdp = migrateToMCD(scdMcdMigration, scdCup, payFeeWith); newMcdCdp = migrateToMCD(scdCup, payFeeWith);
} }
//Transfer if any ETH leftover. //Transfer if any ETH leftover.
@ -524,8 +549,8 @@ contract MigrateResolver is MigrateHelper {
//merge the already existing mcd cdp with the new migrated cdp. //merge the already existing mcd cdp with the new migrated cdp.
if (mergeCDP != 0) { if (mergeCDP != 0) {
shiftCDP(manager, newMcdCdp, mergeCDP); shiftCDP(newMcdCdp, mergeCDP);
giveCDP(manager, newMcdCdp, getGiveAddress()); giveCDP(newMcdCdp, getGiveAddress());
} }
emit LogMigrate( emit LogMigrate(
@ -541,10 +566,7 @@ contract MigrateResolver is MigrateHelper {
uint scdCDP, uint scdCDP,
uint mergeCDP, uint mergeCDP,
uint toConvert, uint toConvert,
address payFeeWith, address payFeeWith
address payable scdMcdMigration,
address manager,
address daiJoin
) external payable returns (uint newMcdCdp) ) external payable returns (uint newMcdCdp)
{ {
bytes32 scdCup = bytes32(scdCDP); bytes32 scdCup = bytes32(scdCDP);
@ -561,7 +583,7 @@ contract MigrateResolver is MigrateHelper {
scdCup, scdCup,
toConvert, toConvert,
payFeeWith, payFeeWith,
daiJoin); InstaMcdAddress(getMcdAddresses()).saiJoin());
//split the assets into split cdp. //split the assets into split cdp.
splitCdp( splitCdp(
@ -573,12 +595,12 @@ contract MigrateResolver is MigrateHelper {
); );
//migrate the split cdp. //migrate the split cdp.
newMcdCdp = migrateToMCD(scdMcdMigration, splitCup, payFeeWith); newMcdCdp = migrateToMCD(splitCup, payFeeWith);
} else { } else {
// draw extra SAI for paying fee. // draw extra SAI for paying fee.
drawDebtForFee(scdCup); drawDebtForFee(scdCup);
//migrate the scd cdp. //migrate the scd cdp.
newMcdCdp = migrateToMCD(scdMcdMigration, scdCup, payFeeWith); newMcdCdp = migrateToMCD(scdCup, payFeeWith);
} }
//Transfer if any ETH leftover. //Transfer if any ETH leftover.
@ -588,8 +610,8 @@ contract MigrateResolver is MigrateHelper {
//merge the already existing mcd cdp with the new migrated cdp. //merge the already existing mcd cdp with the new migrated cdp.
if (mergeCDP != 0) { if (mergeCDP != 0) {
shiftCDP(manager, newMcdCdp, mergeCDP); shiftCDP(newMcdCdp, mergeCDP);
giveCDP(manager, newMcdCdp, getGiveAddress()); giveCDP(newMcdCdp, getGiveAddress());
} }
emit LogMigrateWithDebt( emit LogMigrateWithDebt(