diff --git a/contracts/protocols/InstaKyber.sol b/contracts/protocols/InstaKyber.sol index b32f358..beb1a9e 100644 --- a/contracts/protocols/InstaKyber.sol +++ b/contracts/protocols/InstaKyber.sol @@ -18,12 +18,6 @@ library SafeMath { return c; } - function sub(uint256 a, uint256 b) internal pure returns (uint256) { - require(b <= a, "Assertion Failed"); - uint256 c = a - b; - return c; - } - } interface IERC20 { @@ -85,13 +79,9 @@ contract Trade is Registry { uint destAmt, address beneficiary, uint minConversionRate, - address referral, - uint cut, - address partner + address affiliate ); - address public eth = 0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee; - function getExpectedPrice( address src, address dest, @@ -112,44 +102,23 @@ contract Trade is Registry { } } - struct TradeUints { - uint srcAmt; - uint ethQty; - uint srcAmtWithFees; - uint cut; - uint destAmt; - int ethBalAfterTrade; // it can be neagtive - } - function executeTrade( address src, // token to sell address dest, // token to buy uint srcAmt, // amount of token for sell - uint srcAmtWithFees, // amount of token for sell + fees // equal or greater than srcAmt uint minConversionRate, // minimum slippage rate - uint maxDestAmt, // max amount of dest token - address partner // affiliate partner + uint maxDestAmt // max amount of dest token ) public payable returns (uint destAmt) { - require(srcAmtWithFees >= srcAmt, "srcAmtWithFees can't be small than scrAmt"); - if (src == eth) { - require(srcAmtWithFees == msg.value, "Not enough ETH to cover the trade."); - } - - TradeUints memory tradeSpecs; - Kyber kyberFunctions = Kyber(getAddress("kyber")); - - tradeSpecs.srcAmt = srcAmt; - tradeSpecs.srcAmtWithFees = srcAmtWithFees; - tradeSpecs.cut = srcAmtWithFees.sub(srcAmt); - tradeSpecs.ethQty = getToken( - msg.sender, - src, - srcAmt, - srcAmtWithFees + address eth = getAddress("eth"); + uint ethQty = getToken( + msg.sender, src, srcAmt, eth ); - tradeSpecs.destAmt = kyberFunctions.trade.value(tradeSpecs.ethQty)( + + // Interacting with Kyber Proxy Contract + Kyber kyberFunctions = Kyber(getAddress("kyber")); + destAmt = kyberFunctions.trade.value(ethQty)( src, srcAmt, dest, @@ -159,27 +128,19 @@ contract Trade is Registry { getAddress("admin") ); - // factoring maxDestAmt situation - if (src == eth && address(this).balance > tradeSpecs.cut) { - msg.sender.transfer(address(this).balance.sub(tradeSpecs.cut)); - } else if (src != eth) { + // maxDestAmt usecase implementated + if (src == eth && address(this).balance > 0) { + msg.sender.transfer(address(this).balance); + } else if (src != eth) { // as there is no balanceOf of eth IERC20 srcTkn = IERC20(src); uint srcBal = srcTkn.balanceOf(address(this)); - if (srcBal > tradeSpecs.cut) { - srcTkn.transfer(msg.sender, srcBal.sub(tradeSpecs.cut)); + if (srcBal > 0) { + srcTkn.transfer(msg.sender, srcBal); } } emit KyberTrade( - src, - srcAmt, - dest, - destAmt, - msg.sender, - minConversionRate, - getAddress("admin"), - tradeSpecs.cut, - partner + src, srcAmt, dest, destAmt, msg.sender, minConversionRate, getAddress("admin") ); } @@ -188,7 +149,7 @@ contract Trade is Registry { address trader, address src, uint srcAmt, - uint srcAmtWithFees + address eth ) internal returns (uint ethQty) { if (src == eth) { @@ -196,7 +157,8 @@ contract Trade is Registry { ethQty = srcAmt; } else { IERC20 tokenFunctions = IERC20(src); - tokenFunctions.transferFrom(trader, address(this), srcAmtWithFees); + tokenFunctions.transferFrom(trader, address(this), srcAmt); + ethQty = 0; } } @@ -205,24 +167,10 @@ contract Trade is Registry { contract InstaKyber is Trade { - event ERC20Collected(address addr, uint amount); - event ETHCollected(uint amount); - constructor(address rAddr) public { addressRegistry = rAddr; } function () public payable {} - function collectERC20(address tknAddr, uint amount) public onlyAdmin { - IERC20 tkn = IERC20(tknAddr); - tkn.transfer(msg.sender, amount); - emit ERC20Collected(tknAddr, amount); - } - - function collectETH(uint amount) public onlyAdmin { - msg.sender.transfer(amount); - emit ETHCollected(amount); - } - } \ No newline at end of file diff --git a/contracts/protocols/InstaMaker.sol b/contracts/protocols/InstaMaker.sol index c41ab09..076174c 100644 --- a/contracts/protocols/InstaMaker.sol +++ b/contracts/protocols/InstaMaker.sol @@ -57,10 +57,8 @@ interface InstaKyber { address src, address dest, uint srcAmt, - uint srcAmtToFetch, uint minConversionRate, - uint maxDestAmt, - address partner + uint maxDestAmt ) external payable returns (uint destAmt); function getExpectedPrice( @@ -162,7 +160,7 @@ contract RepayLoan is IssueLoan { function wipeDAI(uint daiWipe, address borrower) public payable returns (uint mkrCharged) { address dai = getAddress("dai"); address mkr = getAddress("mkr"); - address eth = 0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee; + address eth = getAddress("eth"); IERC20 daiTkn = IERC20(dai); IERC20 mkrTkn = IERC20(mkr); @@ -213,10 +211,8 @@ contract RepayLoan is IssueLoan { eth, mkr, ethQty, - ethQty, minRate, - mkrCharged, - address(this) + mkrCharged ); require(mkrCharged == mkrBought, "ETH not sufficient to cover the MKR fees."); }