loopSwap completed

This commit is contained in:
Samyak Jain 2019-06-24 02:38:02 +05:30
parent ade2fc6725
commit 3969d4af74

View File

@ -267,6 +267,7 @@ contract MakerHelpers is Helpers {
ink = rmul(ink, tub.per()) <= jam ? ink : ink - 1; ink = rmul(ink, tub.per()) <= jam ? ink : ink - 1;
tub.free(cup, ink); tub.free(cup, ink);
setAllowance(weth, tubAddr);
setAllowance(peth, tubAddr); setAllowance(peth, tubAddr);
tub.exit(ink); tub.exit(ink);
@ -484,6 +485,17 @@ contract GetDetails is MakerHelpers {
contract SaveResolver is GetDetails { contract SaveResolver is GetDetails {
/**
* @param what 0 for ETH2DAI & 1 for Kyber
*/
event LogSwap(
uint what,
address src,
uint srcAmt,
address dest,
uint destAmt
);
function saveSwap(uint srcAmt, uint daiDebt) internal returns (uint destAmt) { function saveSwap(uint srcAmt, uint daiDebt) internal returns (uint destAmt) {
(,uint isBest) = getBest(getAddressETH(), getAddressDAI(), srcAmt); (,uint isBest) = getBest(getAddressETH(), getAddressDAI(), srcAmt);
if (isBest == 0) { if (isBest == 0) {
@ -505,6 +517,46 @@ contract SaveResolver is GetDetails {
getAddressAdmin() getAddressAdmin()
); );
} }
emit LogSwap(
isBest,
getAddressETH(),
srcAmt,
getAddressDAI(),
destAmt
);
}
function loopSwap(uint srcAmt) internal returns (uint destAmt) {
(,uint isBest) = getBest(getAddressETH(), getAddressDAI(), srcAmt);
if (isBest == 0) {
destAmt = Eth2DaiInterface(getAddressEth2Dai()).sellAllAmount(
getAddressDAI(),
srcAmt,
getAddressWETH(),
0
);
TokenInterface weth = TokenInterface(getAddressWETH());
setAllowance(weth, getSaiTubAddress());
weth.withdraw(destAmt);
} else {
setAllowance(TokenInterface(getAddressDAI()), getAddressKyber());
destAmt = KyberInterface(getAddressKyber()).trade.value(srcAmt)(
getAddressDAI(),
srcAmt,
getAddressETH(),
address(this),
2**255,
0,
getAddressAdmin()
);
}
emit LogSwap(
isBest,
getAddressDAI(),
srcAmt,
getAddressETH(),
destAmt
);
} }
} }
@ -589,16 +641,7 @@ contract Save is SaveResolver {
debtToBorrow = daiToSwap; debtToBorrow = daiToSwap;
} }
draw(cdpID, debtToBorrow); draw(cdpID, debtToBorrow);
setAllowance(TokenInterface(getAddressDAI()), getAddressKyber()); uint destAmt = loopSwap(debtToBorrow);
uint destAmt = KyberInterface(getAddressKyber()).trade.value(0)(
getAddressDAI(),
debtToBorrow,
getAddressETH(),
address(this),
2**255,
0,
getAddressAdmin()
);
lock(cdpID, destAmt); lock(cdpID, destAmt);
emit LogLeverageCDP(cdpID, debtToBorrow, destAmt); emit LogLeverageCDP(cdpID, debtToBorrow, destAmt);