Commented MoatKyber.

This commit is contained in:
Sowmayjain 2018-10-29 04:27:59 +05:30
parent 19c66304a8
commit 20404b567b
2 changed files with 118 additions and 118 deletions

View File

@ -1,142 +1,142 @@
pragma solidity ^0.4.24; // pragma solidity ^0.4.24;
import "openzeppelin-solidity/contracts/math/SafeMath.sol"; // import "openzeppelin-solidity/contracts/math/SafeMath.sol";
import "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol"; // import "openzeppelin-solidity/contracts/token/ERC20/IERC20.sol";
interface AddressRegistry { // interface AddressRegistry {
function getAddr(string name) external view returns(address); // function getAddr(string name) external view returns(address);
function isApprovedResolver(address user) external view returns(bool); // function isApprovedResolver(address user) external view returns(bool);
} // }
interface Kyber { // interface Kyber {
function trade( // function trade(
address src, // address src,
uint srcAmount, // uint srcAmount,
address dest, // address dest,
address destAddress, // address destAddress,
uint maxDestAmount, // uint maxDestAmount,
uint minConversionRate, // uint minConversionRate,
address walletId // address walletId
) external payable returns (uint); // ) external payable returns (uint);
} // }
contract Registry { // contract Registry {
address public addressRegistry; // address public addressRegistry;
modifier onlyAdmin() { // modifier onlyAdmin() {
require( // require(
msg.sender == getAddress("admin"), // msg.sender == getAddress("admin"),
"Permission Denied" // "Permission Denied"
); // );
_; // _;
} // }
function getAddress(string name) internal view returns(address addr) { // function getAddress(string name) internal view returns(address addr) {
AddressRegistry addrReg = AddressRegistry(addressRegistry); // AddressRegistry addrReg = AddressRegistry(addressRegistry);
return addrReg.getAddr(name); // return addrReg.getAddr(name);
} // }
} // }
contract Trade is Registry { // contract Trade is Registry {
event KyberTrade( // event KyberTrade(
address src, // address src,
uint srcAmt, // uint srcAmt,
address dest, // address dest,
uint destAmt, // uint destAmt,
address beneficiary, // address beneficiary,
uint fees, // uint fees,
uint slipRate, // uint slipRate,
address affiliate // address affiliate
); // );
// ropsten network // // ropsten network
address public kyberAddr = 0x818E6FECD516Ecc3849DAf6845e3EC868087B755; // address public kyberAddr = 0x818E6FECD516Ecc3849DAf6845e3EC868087B755;
address public eth = 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee; // address public eth = 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee;
function executeTrade( // function executeTrade(
address trader, // address trader,
address src, // address src,
address dest, // address dest,
uint srcAmt, // uint srcAmt,
uint slipRate // uint slipRate
) public payable onlyUserOrResolver(trader) returns (uint destAmt) // ) public payable onlyUserOrResolver(trader) returns (uint destAmt)
{ // {
fetchToken(trader, src, srcAmt); // fetchToken(trader, src, srcAmt);
uint fees = deductFees(src, srcAmt); // uint fees = deductFees(src, srcAmt);
Kyber kyberFunctions = Kyber(kyberAddr); // Kyber kyberFunctions = Kyber(kyberAddr);
destAmt = kyberFunctions.trade.value(msg.value)( // destAmt = kyberFunctions.trade.value(msg.value)(
src, // src,
srcAmt - fees, // srcAmt - fees,
dest, // dest,
trader, // trader,
2**256 - 1, // 2**256 - 1,
slipRate, // slipRate,
getAddress("admin") // getAddress("admin")
); // );
emit KyberTrade( // emit KyberTrade(
src, // src,
srcAmt, // srcAmt,
dest, // dest,
destAmt, // destAmt,
trader, // trader,
fees, // fees,
slipRate, // slipRate,
getAddress("admin") // getAddress("admin")
); // );
} // }
function fetchToken(address trader, address src, uint srcAmt) internal { // function fetchToken(address trader, address src, uint srcAmt) internal {
if (src != eth) { // if (src != eth) {
IERC20 tokenFunctions = IERC20(src); // IERC20 tokenFunctions = IERC20(src);
tokenFunctions.transferFrom(trader, address(this), srcAmt); // tokenFunctions.transferFrom(trader, address(this), srcAmt);
} // }
} // }
function deductFees(address src, uint volume) internal returns(uint fees) { // function deductFees(address src, uint volume) internal returns(uint fees) {
Resolver moatRes = Resolver(getAddress("resolver")); // Resolver moatRes = Resolver(getAddress("resolver"));
fees = moatRes.fees(); // fees = moatRes.fees();
if (fees > 0) { // if (fees > 0) {
fees = volume / fees; // fees = volume / fees;
if (src == eth) { // if (src == eth) {
getAddress("admin").transfer(fees); // getAddress("admin").transfer(fees);
} else { // } else {
IERC20 tokenFunctions = IERC20(src); // IERC20 tokenFunctions = IERC20(src);
tokenFunctions.transfer(getAddress("admin"), fees); // tokenFunctions.transfer(getAddress("admin"), fees);
} // }
} // }
} // }
function allowKyber(address[] tokenArr) public { // function allowKyber(address[] tokenArr) public {
for (uint i = 0; i < tokenArr.length; i++) { // for (uint i = 0; i < tokenArr.length; i++) {
IERC20 tokenFunctions = IERC20(tokenArr[i]); // IERC20 tokenFunctions = IERC20(tokenArr[i]);
tokenFunctions.approve(getAddress("kyber"), 2**256 - 1); // tokenFunctions.approve(getAddress("kyber"), 2**256 - 1);
} // }
} // }
} // }
contract MoatKyber is Trade { // contract MoatKyber is Trade {
constructor(address rAddr) public { // constructor(address rAddr) public {
addressRegistry = rAddr; // addressRegistry = rAddr;
} // }
function () public payable {} // function () public payable {}
function collectAsset(address tokenAddress, uint amount) public onlyAdmin { // function collectAsset(address tokenAddress, uint amount) public onlyAdmin {
if (tokenAddress == eth) { // if (tokenAddress == eth) {
msg.sender.transfer(amount); // msg.sender.transfer(amount);
} else { // } else {
IERC20 tokenFunctions = IERC20(tokenAddress); // IERC20 tokenFunctions = IERC20(tokenAddress);
tokenFunctions.transfer(msg.sender, amount); // tokenFunctions.transfer(msg.sender, amount);
} // }
} // }
} // }

View File

@ -69,7 +69,7 @@ contract IssueLoan is GlobalVar {
event LoanedDAI(address borrower, uint loanDAI, uint fees); event LoanedDAI(address borrower, uint loanDAI, uint fees);
event OpenedNewCDP(address borrower, bytes32 cdpBytes); event OpenedNewCDP(address borrower, bytes32 cdpBytes);
function pethPEReth(uint eth) public returns (uint rPETH) { function pethPEReth(uint eth) public view returns (uint rPETH) {
rPETH = eth * (10 ** 27) / loanMaster.per(); rPETH = eth * (10 ** 27) / loanMaster.per();
} }