comments added

This commit is contained in:
Samyak Jain 2019-09-09 19:37:48 -07:00
parent 22f70fdc12
commit 7bbfa509b7
2 changed files with 81 additions and 40 deletions

View File

@ -178,7 +178,7 @@ contract Helper is DSMath {
}
/**
* @dev get uniswap DAI exchange
* @dev get InstaDApp Liquidity contract
*/
function getLiquidityAddr() public pure returns (address liquidity) {
// liquidity = ;
@ -192,48 +192,41 @@ contract Helper is DSMath {
}
/**
* @dev get Compound Comptroller Address
* @dev get Compound Oracle Address
*/
function getCompOracleAddress() public pure returns (address troller) {
troller = 0xe7664229833AE4Abf4E269b8F23a86B657E2338D;
}
/**
* @dev get Compound Comptroller Address
* @dev get CETH Address
*/
function getCETHAddress() public pure returns (address cEth) {
cEth = 0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5;
}
/**
* @dev get Compound Comptroller Address
* @dev get DAI Address
*/
function getDAIAddress() public pure returns (address dai) {
dai = 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359;
}
/**
* @dev get Compound Comptroller Address
* @dev get CDAI Address
*/
function getCDAIAddress() public pure returns (address cDai) {
cDai = 0xF5DCe57282A584D2746FaF1593d3121Fcac444dC;
}
/**
* @dev get CDP bytes by CDP ID
*/
function getCDPBytes(uint cdpNum) public pure returns (bytes32 cup) {
cup = bytes32(cdpNum);
}
/**
* @dev setting allowance to compound for the "user proxy" if required
* @dev setting allowance to compound contracts for the "user proxy" if required
*/
function setApproval(address erc20, uint srcAmt, address to) internal {
TokenInterface erc20Contract = TokenInterface(erc20);
uint tokenAllowance = erc20Contract.allowance(address(this), to);
if (srcAmt > tokenAllowance) {
erc20Contract.approve(to, 2**255);
erc20Contract.approve(to, uint(-1));
}
}
@ -249,33 +242,25 @@ contract MakerHelper is Helper {
event LogWipe(uint cdpNum, uint daiAmt, uint mkrFee, uint daiFee, address owner);
event LogShut(uint cdpNum);
function getCDPStats(bytes32 cup) public view returns (uint ethCol, uint daiDebt) {
TubInterface tub = TubInterface(getSaiTubAddress());
(, uint pethCol, uint debt,) = tub.cups(cup);
ethCol = rmul(pethCol, tub.per()); // get ETH col from PETH col
daiDebt = debt;
}
/**
* @dev get final Ratio of Maker CDP
* @param ethCol amount of ETH Col to add in existing Col
* @param daiDebt amount of DAI Debt to add in existing Debt
* @dev Allowance to Maker's contract
*/
function getMakerRatio(bytes32 cup, uint ethCol, uint daiDebt) public view returns (uint ratio) {
(uint makerCol, uint makerDebt) = getCDPStats(cup);
makerCol += ethCol;
makerDebt += daiDebt;
uint usdPerEth = uint(MakerOracleInterface(getOracleAddress()).read());
uint makerColInUSD = wmul(makerCol, usdPerEth);
ratio = wdiv(makerDebt, makerColInUSD);
}
function setMakerAllowance(TokenInterface _token, address _spender) internal {
if (_token.allowance(address(this), _spender) != uint(-1)) {
_token.approve(_spender, uint(-1));
}
}
/**
* @dev CDP stats by Bytes
*/
function getCDPStats(bytes32 cup) internal view returns (uint ethCol, uint daiDebt) {
TubInterface tub = TubInterface(getSaiTubAddress());
(, uint pethCol, uint debt,) = tub.cups(cup);
ethCol = rmul(pethCol, tub.per()); // get ETH col from PETH col
daiDebt = debt;
}
}
@ -286,6 +271,9 @@ contract CompoundHelper is MakerHelper {
event LogBorrow(address erc20, address cErc20, uint tokenAmt, address owner);
event LogRepay(address erc20, address cErc20, uint tokenAmt, address owner);
/**
* @dev Compound Enter Market which allows borrowing
*/
function enterMarket(address cErc20) internal {
ComptrollerInterface troller = ComptrollerInterface(getComptrollerAddress());
address[] memory markets = troller.getAssetsIn(address(this));
@ -307,6 +295,9 @@ contract CompoundHelper is MakerHelper {
contract MakerResolver is CompoundHelper {
/**
* @dev Open new CDP
*/
function open() internal returns (uint) {
bytes32 cup = TubInterface(getSaiTubAddress()).open();
emit LogOpen(uint(cup), address(this));
@ -320,6 +311,9 @@ contract MakerResolver is CompoundHelper {
TubInterface(getSaiTubAddress()).give(bytes32(cdpNum), nextOwner);
}
/**
* @dev Pay CDP debt
*/
function wipe(uint cdpNum, uint _wad) internal returns (uint daiAmt) {
if (_wad > 0) {
TubInterface tub = TubInterface(getSaiTubAddress());
@ -370,6 +364,9 @@ contract MakerResolver is CompoundHelper {
}
}
/**
* @dev Withdraw CDP
*/
function free(uint cdpNum, uint jam) internal {
if (jam > 0) {
bytes32 cup = bytes32(cdpNum);
@ -391,6 +388,9 @@ contract MakerResolver is CompoundHelper {
}
}
/**
* @dev Deposit Collateral
*/
function lock(uint cdpNum, uint ethAmt) internal {
if (ethAmt > 0) {
bytes32 cup = bytes32(cdpNum);
@ -416,6 +416,9 @@ contract MakerResolver is CompoundHelper {
}
}
/**
* @dev Borrow DAI Debt
*/
function draw(uint cdpNum, uint _wad) internal {
bytes32 cup = bytes32(cdpNum);
if (_wad > 0) {
@ -428,6 +431,9 @@ contract MakerResolver is CompoundHelper {
}
}
/**
* @dev Check if entered amt is valid or not (Used in makerToCompound)
*/
function checkCDP(bytes32 cup, uint ethAmt, uint daiAmt) internal returns (uint ethCol, uint daiDebt) {
TubInterface tub = TubInterface(getSaiTubAddress());
ethCol = rmul(tub.ink(cup), tub.per()); // get ETH col from PETH col
@ -436,11 +442,17 @@ contract MakerResolver is CompoundHelper {
ethCol = ethAmt < ethCol ? ethAmt : ethCol; // if ETH amount > max Col. Set max col
}
/**
* @dev Run wipe & Free function together
*/
function wipeAndFreeMaker(uint cdpNum, uint jam, uint _wad) internal returns (uint daiAmt) {
daiAmt = wipe(cdpNum, _wad);
free(cdpNum, jam);
}
/**
* @dev Run Lock & Draw function together
*/
function lockAndDrawMaker(uint cdpNum, uint jam, uint _wad) internal {
lock(cdpNum, jam);
draw(cdpNum, _wad);
@ -452,7 +464,7 @@ contract MakerResolver is CompoundHelper {
contract CompoundResolver is MakerResolver {
/**
* @dev Deposit ETH and mint Compound Tokens
* @dev Deposit ETH and mint CETH
*/
function mintCEth(uint tokenAmt) internal {
enterMarket(getCETHAddress());
@ -528,18 +540,24 @@ contract CompoundResolver is MakerResolver {
);
}
/**
* @dev run mint & borrow together
*/
function mintAndBorrowComp(uint ethAmt, uint daiAmt) internal {
mintCEth(ethAmt);
borrowDAIComp(daiAmt);
}
/**
* @dev run payback & redeem together
*/
function paybackAndRedeemComp(uint ethCol, uint daiDebt) internal returns (uint ethAmt, uint daiAmt) {
daiAmt = repayDaiComp(daiDebt);
ethAmt = redeemCETH(ethCol);
}
/**
* @dev If col/debt > user's balance/borrow. Then set max
* @dev Check if entered amt is valid or not (Used in makerToCompound)
*/
function checkCompound(uint ethAmt, uint daiAmt) internal returns (uint ethCol, uint daiDebt) {
CTokenInterface cEthContract = CTokenInterface(getCETHAddress());
@ -562,11 +580,13 @@ contract Bridge is CompoundResolver {
event LogCompoundToMaker(uint ethAmt, uint daiAmt);
/**
* @dev MakerDAO to Compound
* @dev convert Maker CDP into Compound Collateral
*/
function makerToCompound(uint cdpId, uint ethQty, uint daiQty) public {
(uint ethAmt, uint daiDebt) = checkCDP(bytes32(cdpId), ethQty, daiQty);
uint daiAmt = wipeAndFreeMaker(cdpId, ethAmt, daiDebt); // Getting Liquidity inside Wipe function
enterMarket(getCETHAddress());
enterMarket(getCDAIAddress());
mintAndBorrowComp(ethAmt, daiAmt); // Returning Liquidity inside Borrow function
emit LogMakerToCompound(ethAmt, daiAmt);
}

View File

@ -108,7 +108,7 @@ contract ProvideLiquidity is Helper {
mapping (address => uint) public totalDeposits;
/**
* @dev Deposit DAI for liquidity
* @dev Deposit Token for liquidity
*/
function depositToken(address tknAddr, address ctknAddr, uint amt) public payable {
if (tknAddr != ethAddr) {
@ -203,6 +203,9 @@ contract AccessLiquidity is ProvideLiquidity {
_;
}
/**
* @dev Redeem CTokens and use them on InstaDApp's contract wallets
*/
function redeemTknAndTransfer(address tknAddr, address ctknAddr, uint tknAmt) public isUserWallet {
if (tknAmt > 0) {
if (tknAddr != ethAddr) {
@ -224,7 +227,10 @@ contract AccessLiquidity is ProvideLiquidity {
}
}
function mintTknBack(address tknAddr, address ctknAddr, uint tknAmt) public payable {
/**
* @dev Mint back redeemed tokens
*/
function mintTknBack(address tknAddr, address ctknAddr, uint tknAmt) public payable isUserWallet {
if (tknAmt > 0) {
if (tknAddr != ethAddr) {
CTokenInterface ctknContract = CTokenInterface(ctknAddr);
@ -241,6 +247,9 @@ contract AccessLiquidity is ProvideLiquidity {
}
}
/**
* @dev Borrow tokens and use them on InstaDApp's contract wallets
*/
function borrowTknAndTransfer(address tknAddr, address ctknAddr, uint tknAmt) public isUserWallet {
if (tknAmt > 0) {
CTokenInterface ctknContract = CTokenInterface(ctknAddr);
@ -261,7 +270,10 @@ contract AccessLiquidity is ProvideLiquidity {
}
}
function payBorrowBack(address tknAddr, address ctknAddr, uint tknAmt) public payable {
/**
* @dev Payback borrow tokens
*/
function payBorrowBack(address tknAddr, address ctknAddr, uint tknAmt) public payable isUserWallet {
if (tknAmt > 0) {
if (tknAddr != ethAddr) {
CTokenInterface ctknContract = CTokenInterface(ctknAddr);
@ -278,12 +290,15 @@ contract AccessLiquidity is ProvideLiquidity {
contract AdminStuff is AccessLiquidity {
/**
* Give approval to other addresses
*/
function setApproval(address erc20, uint srcAmt, address to) public {
require(msg.sender == adminOne || msg.sender == adminTwo, "Not admin address");
ERC20Interface erc20Contract = ERC20Interface(erc20);
uint tokenAllowance = erc20Contract.allowance(address(this), to);
if (srcAmt > tokenAllowance) {
erc20Contract.approve(to, 2**255);
erc20Contract.approve(to, uint(-1));
}
}
@ -324,12 +339,18 @@ contract AdminStuff is AccessLiquidity {
}
}
/**
* Enter Compound Market to enable borrowing
*/
function enterMarket(address[] memory cTknAddrArr) internal {
require(msg.sender == adminOne || msg.sender == adminTwo, "Not admin address");
ComptrollerInterface troller = ComptrollerInterface(comptrollerAddr);
troller.enterMarkets(cTknAddrArr);
}
/**
* Enter Compound Market to disable borrowing
*/
function exitMarket(address cErc20) internal {
require(msg.sender == adminOne || msg.sender == adminTwo, "Not admin address");
ComptrollerInterface troller = ComptrollerInterface(comptrollerAddr);