From af6332ba1af7037ac277f25b9a1a6ce3f5b38ed9 Mon Sep 17 00:00:00 2001 From: Samyak Jain Date: Mon, 17 Jun 2019 00:48:12 +0530 Subject: [PATCH] bridge completed --- contracts/ProxyLogics/InstaBridge.sol | 45 ++++++++------------------- contracts/bridges/MakerCompound.sol | 28 ++++++++++++++++- 2 files changed, 40 insertions(+), 33 deletions(-) diff --git a/contracts/ProxyLogics/InstaBridge.sol b/contracts/ProxyLogics/InstaBridge.sol index 4ca6853..b68d02b 100644 --- a/contracts/ProxyLogics/InstaBridge.sol +++ b/contracts/ProxyLogics/InstaBridge.sol @@ -55,6 +55,8 @@ interface UniswapExchange { interface BridgeInterface { function transferDAI(uint) external; function transferBackDAI(uint) external; + function cArrLength() external view returns (uint); + function cTokenAddr(uint) external view returns (address, uint); } interface CTokenInterface { @@ -243,23 +245,13 @@ contract Helper is DSMath { cup = bytes32(cdpNum); } - struct CTokenData { - address cTokenAdd; - uint factor; - } - - CTokenData[] public cTokenAddr; - - function addCToken(address cToken, uint factor) public { - require(condition); - CTokenData memory setCToken = CTokenData(cToken, factor); - cTokenAddr.push(setCToken); - } - function getCompRatio(address user) public returns (uint totalSupply, uint totalBorrow, uint maxBorrow, uint ratio) { - for (uint i = 0; i < cTokenAddr.length; i++) { - CTokenInterface cTokenContract = CTokenInterface(cTokenAddr[i].cTokenAdd); - uint tokenPriceInEth = CompOracleInterface(getCompOracleAddress()).getUnderlyingPrice(cTokenAddr[i].cTokenAdd); + BridgeInterface bridgeContract = BridgeInterface(getBridgeAddress()); + uint arrLength = bridgeContract.cArrLength(); + for (uint i = 0; i < arrLength; i++) { + (address cTokenAdd, uint factor) = bridgeContract.cTokenAddr(i); + CTokenInterface cTokenContract = CTokenInterface(cTokenAdd); + uint tokenPriceInEth = CompOracleInterface(getCompOracleAddress()).getUnderlyingPrice(cTokenAdd); uint cTokenBal = cTokenContract.balanceOf(user); uint cTokenExchangeRate = cTokenContract.exchangeRateCurrent(); uint tokenSupply = wmul(cTokenBal, cTokenExchangeRate); @@ -268,7 +260,7 @@ contract Helper is DSMath { uint borrowInEth = wmul(tokenBorrowed, tokenPriceInEth); totalSupply += supplyInEth; totalBorrow += borrowInEth; - maxBorrow += wmul(supplyInEth, cTokenAddr[i].factor); + maxBorrow += wmul(supplyInEth, factor); } ratio = wdiv(totalBorrow, totalSupply); } @@ -411,9 +403,10 @@ contract MakerHelper is Helper { if (ethCol == 0) { (ethCol,) = getCDPStats(cup); } - (uint totalSupply, uint totalBorrow, uint maxBorrow, uint ratio) = getCompRatio(address(this)); - uint ratio = wdiv(debtInEth, ethCol); - require(ratio < 740000000000000000, "Ratio above 74%"); + (uint totalSupply, uint totalBorrow, uint maxBorrow,) = getCompRatio(address(this)); + totalBorrow += debtInEth; + maxBorrow += wmul(ethCol, 750000000000000000); + require(totalBorrow < maxBorrow, "Compound will liquidate"); BridgeInterface(getBridgeAddress()).transferDAI(daiAmt); @@ -630,18 +623,6 @@ contract InstaBridge is Bridge { * 1...2...3 versioning in each subsequent deployments */ constructor(uint _version) public { - addCToken(0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E, 600000000000000000); - addCToken(0xF5DCe57282A584D2746FaF1593d3121Fcac444dC, 750000000000000000); - addCToken(0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5, 750000000000000000); - addCToken(0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1, 500000000000000000); - addCToken(0x39AA39c021dfbaE8faC545936693aC917d5E7563, 750000000000000000); - addCToken(0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407, 600000000000000000); - // addCToken(0xEBf1A11532b93a529b5bC942B4bAA98647913002, 600000000000000000); // Rinkeby - // addCToken(0x6D7F0754FFeb405d23C51CE938289d4835bE3b14, 700000000000000000); // Rinkeby - // addCToken(0xd6801a1DfFCd0a410336Ef88DeF4320D6DF1883e, 800000000000000000); // Rinkeby - // addCToken(0xEBe09eB3411D18F4FF8D859e096C533CAC5c6B60, 400000000000000000); // Rinkeby - // addCToken(0x5B281A6DdA0B271e91ae35DE655Ad301C976edb1, 800000000000000000); // Rinkeby - // addCToken(0x52201ff1720134bBbBB2f6BC97Bf3715490EC19B, 600000000000000000); // Rinkeby version = _version; } diff --git a/contracts/bridges/MakerCompound.sol b/contracts/bridges/MakerCompound.sol index 6502fbd..25a73c5 100644 --- a/contracts/bridges/MakerCompound.sol +++ b/contracts/bridges/MakerCompound.sol @@ -87,7 +87,27 @@ contract Helper is DSMath { } -contract Bridge is Helper { +contract CTokens is Helper { + + struct CTokenData { + address cTokenAdd; + uint factor; + } + + CTokenData[] public cTokenAddr; + + uint public cArrLength = 0; + + function addCToken(address cToken, uint factor) public { + require(isAdmin[msg.sender], "Address not an admin"); + CTokenData memory setCToken = CTokenData(cToken, factor); + cTokenAddr.push(setCToken); + cArrLength++; + } +} + + +contract Bridge is CTokens { function depositDAI(uint amt) public { ERC20Interface(daiAdd).transferFrom(msg.sender, address(this), amt); @@ -155,6 +175,12 @@ contract MakerCompBridge is Bridge { * 1...2...3 versioning in each subsequent deployments */ constructor(uint _version) public { + addCToken(0x6C8c6b02E7b2BE14d4fA6022Dfd6d75921D90E4E, 600000000000000000); + addCToken(0xF5DCe57282A584D2746FaF1593d3121Fcac444dC, 750000000000000000); + addCToken(0x4Ddc2D193948926D02f9B1fE9e1daa0718270ED5, 750000000000000000); + addCToken(0x158079Ee67Fce2f58472A96584A73C7Ab9AC95c1, 500000000000000000); + addCToken(0x39AA39c021dfbaE8faC545936693aC917d5E7563, 750000000000000000); + addCToken(0xB3319f5D18Bc0D84dD1b4825Dcde5d5f7266d407, 600000000000000000); isAdmin[0x7284a8451d9a0e7Dc62B3a71C0593eA2eC5c5638] = true; isAdmin[0xa7615CD307F323172331865181DC8b80a2834324] = true; version = _version;