mirror of
				https://github.com/Instadapp/smart-contract.git
				synced 2024-07-29 22:08:07 +00:00 
			
		
		
		
	new liquidity done
This commit is contained in:
		
							parent
							
								
									82f58dc7d0
								
							
						
					
					
						commit
						f0dfd5dc5d
					
				|  | @ -14,37 +14,27 @@ interface ERC20Interface { | ||||||
|     function approve(address, uint) external; |     function approve(address, uint) external; | ||||||
|     function transfer(address, uint) external returns (bool); |     function transfer(address, uint) external returns (bool); | ||||||
|     function transferFrom(address, address, uint) external returns (bool); |     function transferFrom(address, address, uint) external returns (bool); | ||||||
|     function deposit() external payable; |  | ||||||
|     function withdraw(uint) external; |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| interface CTokenInterface { | interface CTokenInterface { | ||||||
|     function mint(uint mintAmount) external returns (uint); // For ERC20 |     function mint(uint mintAmount) external returns (uint); // For ERC20 | ||||||
|     function redeem(uint redeemTokens) external returns (uint); |     function redeem(uint redeemTokens) external returns (uint); | ||||||
|     function redeemUnderlying(uint redeemAmount) external returns (uint); |  | ||||||
|     function borrow(uint borrowAmount) external returns (uint); |     function borrow(uint borrowAmount) external returns (uint); | ||||||
|     function exchangeRateCurrent() external returns (uint); |  | ||||||
|     function transfer(address, uint) external returns (bool); |     function transfer(address, uint) external returns (bool); | ||||||
|     function transferFrom(address, address, uint) external returns (bool); |     function transferFrom(address, address, uint) external returns (bool); | ||||||
|     function balanceOf(address) external view returns (uint); |  | ||||||
|     function repayBorrow(uint repayAmount) external returns (uint); // For ERC20 |     function repayBorrow(uint repayAmount) external returns (uint); // For ERC20 | ||||||
|     function borrowBalanceCurrent(address account) external returns (uint); |  | ||||||
|     function underlying() external view returns (address); |     function underlying() external view returns (address); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| interface CETHInterface { | interface CETHInterface { | ||||||
|     function exchangeRateCurrent() external returns (uint); |  | ||||||
|     function mint() external payable; // For ETH |     function mint() external payable; // For ETH | ||||||
|     function repayBorrow() external payable; // For ETH |     function repayBorrow() external payable; // For ETH | ||||||
|     function transfer(address, uint) external returns (bool); |     function transfer(address, uint) external returns (bool); | ||||||
|     function borrowBalanceCurrent(address account) external returns (uint); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| interface ComptrollerInterface { | interface ComptrollerInterface { | ||||||
|     function enterMarkets(address[] calldata cTokens) external returns (uint[] memory); |     function enterMarkets(address[] calldata cTokens) external returns (uint[] memory); | ||||||
|     function exitMarket(address cTokenAddress) external returns (uint); |     function exitMarket(address cTokenAddress) external returns (uint); | ||||||
|     function getAssetsIn(address account) external view returns (address[] memory); |  | ||||||
|     function getAccountLiquidity(address account) external view returns (uint, uint, uint); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -59,15 +49,6 @@ contract DSMath { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     uint constant WAD = 10 ** 18; |     uint constant WAD = 10 ** 18; | ||||||
|     uint constant RAY = 10 ** 27; |  | ||||||
| 
 |  | ||||||
|     function rmul(uint x, uint y) internal pure returns (uint z) { |  | ||||||
|         z = add(mul(x, y), RAY / 2) / RAY; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     function rdiv(uint x, uint y) internal pure returns (uint z) { |  | ||||||
|         z = add(mul(x, RAY), y / 2) / y; |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     function wmul(uint x, uint y) internal pure returns (uint z) { |     function wmul(uint x, uint y) internal pure returns (uint z) { | ||||||
|         z = add(mul(x, y), WAD / 2) / WAD; |         z = add(mul(x, y), WAD / 2) / WAD; | ||||||
|  | @ -93,8 +74,6 @@ contract Helper is DSMath { | ||||||
|     address public registry = 0x498b3BfaBE9F73db90D252bCD4Fa9548Cd0Fd981; |     address public registry = 0x498b3BfaBE9F73db90D252bCD4Fa9548Cd0Fd981; | ||||||
|     address public comptrollerAddr = 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B; |     address public comptrollerAddr = 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B; | ||||||
| 
 | 
 | ||||||
|     mapping (address => bool) isCToken; |  | ||||||
| 
 |  | ||||||
|     address payable public adminOne = 0xd8db02A498E9AFbf4A32BC006DC1940495b4e592; |     address payable public adminOne = 0xd8db02A498E9AFbf4A32BC006DC1940495b4e592; | ||||||
|     address payable public adminTwo = 0x0f0EBD0d7672362D11e0b6d219abA30b0588954E; |     address payable public adminTwo = 0x0f0EBD0d7672362D11e0b6d219abA30b0588954E; | ||||||
| 
 | 
 | ||||||
|  | @ -109,65 +88,8 @@ contract ProvideLiquidity is Helper { | ||||||
| 
 | 
 | ||||||
|     mapping (address => mapping (address => uint)) public deposits; |     mapping (address => mapping (address => uint)) public deposits; | ||||||
| 
 | 
 | ||||||
|     // event LogDepositToken(address tknAddr, address ctknAddr, uint amt); |     event LogDepositCToken(address user, address ctknAddr, uint amt); | ||||||
|     // event LogWithdrawToken(address tknAddr, address ctknAddr, uint amt); |     event LogWithdrawCToken(address user, address ctknAddr, uint amt); | ||||||
|     event LogDepositCToken(address ctknAddr, uint amt); |  | ||||||
|     event LogWithdrawCToken(address ctknAddr, uint amt); |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * @dev Deposit Token for liquidity. Shift this to logic proxy |  | ||||||
|      */ |  | ||||||
|     function depositToken(address ctknAddr, uint amt) public payable { |  | ||||||
|         if (ctknAddr != cEth) { |  | ||||||
|             CTokenInterface cTokenContract = CTokenInterface(ctknAddr); |  | ||||||
|             address tknAddr = cTokenContract.underlying(); |  | ||||||
|             require(ERC20Interface(tknAddr).transferFrom(msg.sender, address(this), amt), "Not enough tkn to deposit"); |  | ||||||
|             assert(cTokenContract.mint(amt) == 0); |  | ||||||
|             uint exchangeRate = cTokenContract.exchangeRateCurrent(); |  | ||||||
|             uint cTknAmt = wdiv(amt, exchangeRate); |  | ||||||
|             cTknAmt = wmul(cTknAmt, exchangeRate) <= amt ? cTknAmt : cTknAmt - 1; |  | ||||||
|             deposits[msg.sender][ctknAddr] += cTknAmt; |  | ||||||
|             emit LogDepositCToken(ctknAddr, cTknAmt); |  | ||||||
|         } else { |  | ||||||
|             CETHInterface cEthContract = CETHInterface(ctknAddr); |  | ||||||
|             cEthContract.mint.value(msg.value)(); |  | ||||||
|             uint exchangeRate = cEthContract.exchangeRateCurrent(); |  | ||||||
|             uint cEthAmt = wdiv(msg.value, exchangeRate); |  | ||||||
|             cEthAmt = wmul(cEthAmt, exchangeRate) <= msg.value ? cEthAmt : cEthAmt - 1; |  | ||||||
|             deposits[msg.sender][ctknAddr] += cEthAmt; |  | ||||||
|             emit LogDepositCToken(ctknAddr, cEthAmt); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * @dev Withdraw Token from liquidity. Shift this to logic proxy |  | ||||||
|      */ |  | ||||||
|     function withdrawToken(address ctknAddr, uint amt) public { |  | ||||||
|         require(deposits[msg.sender][ctknAddr] != 0, "Nothing to Withdraw"); |  | ||||||
|         CTokenInterface cTokenContract = CTokenInterface(ctknAddr); |  | ||||||
|         uint exchangeRate = cTokenContract.exchangeRateCurrent(); |  | ||||||
|         uint withdrawAmt = wdiv(amt, exchangeRate); |  | ||||||
|         uint tknAmt = amt; |  | ||||||
|         if (withdrawAmt > deposits[msg.sender][ctknAddr]) { |  | ||||||
|             withdrawAmt = deposits[msg.sender][ctknAddr]; |  | ||||||
|             tknAmt = wmul(withdrawAmt, exchangeRate); |  | ||||||
|         } |  | ||||||
|         if (ctknAddr != cEth) { |  | ||||||
|             address tknAddr = cTokenContract.underlying(); |  | ||||||
|             ERC20Interface tknContract = ERC20Interface(tknAddr); |  | ||||||
|             require(cTokenContract.redeem(withdrawAmt) == 0, "something went wrong"); |  | ||||||
|             uint tknBal = tknContract.balanceOf(address(this)); |  | ||||||
|             tknAmt = tknAmt < tknBal ? tknAmt : tknBal; |  | ||||||
|             require(ERC20Interface(tknAddr).transfer(msg.sender, tknAmt), "not enough tkn to Transfer"); |  | ||||||
|         } else { |  | ||||||
|             require(cTokenContract.redeem(withdrawAmt) == 0, "something went wrong"); |  | ||||||
|             uint tknBal = address(this).balance; |  | ||||||
|             tknAmt = tknAmt < tknBal ? tknAmt : tknBal; |  | ||||||
|             msg.sender.transfer(tknAmt); |  | ||||||
|         } |  | ||||||
|         deposits[msg.sender][ctknAddr] -= withdrawAmt; |  | ||||||
|         emit LogWithdrawCToken(ctknAddr, withdrawAmt); |  | ||||||
|     } |  | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * @dev Deposit CToken for liquidity |      * @dev Deposit CToken for liquidity | ||||||
|  | @ -175,18 +97,18 @@ contract ProvideLiquidity is Helper { | ||||||
|     function depositCTkn(address ctknAddr, uint amt) public { |     function depositCTkn(address ctknAddr, uint amt) public { | ||||||
|         require(CTokenInterface(ctknAddr).transferFrom(msg.sender, address(this), amt), "Nothing to deposit"); |         require(CTokenInterface(ctknAddr).transferFrom(msg.sender, address(this), amt), "Nothing to deposit"); | ||||||
|         deposits[msg.sender][ctknAddr] += amt; |         deposits[msg.sender][ctknAddr] += amt; | ||||||
|         emit LogDepositCToken(ctknAddr, amt); |         emit LogDepositCToken(msg.sender, ctknAddr, amt); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * @dev Withdraw CToken from liquidity |      * @dev Withdraw CToken from liquidity | ||||||
|      */ |      */ | ||||||
|     function withdrawCTkn(address ctknAddr, uint amt) public { |     function withdrawCTkn(address ctknAddr, uint amt) public returns(uint withdrawAmt) { | ||||||
|         require(deposits[msg.sender][ctknAddr] != 0, "Nothing to Withdraw"); |         require(deposits[msg.sender][ctknAddr] != 0, "Nothing to Withdraw"); | ||||||
|         uint withdrawAmt = amt < deposits[msg.sender][ctknAddr] ? amt : deposits[msg.sender][ctknAddr]; |         withdrawAmt = amt < deposits[msg.sender][ctknAddr] ? amt : deposits[msg.sender][ctknAddr]; | ||||||
|         assert(CTokenInterface(ctknAddr).transfer(msg.sender, withdrawAmt)); |         assert(CTokenInterface(ctknAddr).transfer(msg.sender, withdrawAmt)); | ||||||
|         deposits[msg.sender][ctknAddr] -= withdrawAmt; |         deposits[msg.sender][ctknAddr] -= withdrawAmt; | ||||||
|         emit LogWithdrawCToken(ctknAddr, withdrawAmt); |         emit LogWithdrawCToken(msg.sender, ctknAddr, withdrawAmt); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | @ -212,7 +134,7 @@ contract AccessLiquidity is ProvideLiquidity { | ||||||
|     /** |     /** | ||||||
|      * @dev Borrow tokens and use them on InstaDApp's contract wallets |      * @dev Borrow tokens and use them on InstaDApp's contract wallets | ||||||
|      */ |      */ | ||||||
|     function borrowTknAndTransfer42514(address ctknAddr, uint tknAmt) public isUserWallet { |     function borrowTknAndTransfer(address ctknAddr, uint tknAmt) public isUserWallet { | ||||||
|         if (tknAmt > 0) { |         if (tknAmt > 0) { | ||||||
|             CTokenInterface ctknContract = CTokenInterface(ctknAddr); |             CTokenInterface ctknContract = CTokenInterface(ctknAddr); | ||||||
|             if (ctknAddr != cEth) { |             if (ctknAddr != cEth) { | ||||||
|  | @ -231,7 +153,7 @@ contract AccessLiquidity is ProvideLiquidity { | ||||||
|     /** |     /** | ||||||
|      * @dev Payback borrow tokens |      * @dev Payback borrow tokens | ||||||
|      */ |      */ | ||||||
|     function payBorrowBack42514(address ctknAddr, uint tknAmt) public payable isUserWallet { |     function payBorrowBack(address ctknAddr, uint tknAmt) public payable isUserWallet { | ||||||
|         if (tknAmt > 0) { |         if (tknAmt > 0) { | ||||||
|             if (ctknAddr != cEth) { |             if (ctknAddr != cEth) { | ||||||
|                 CTokenInterface ctknContract = CTokenInterface(ctknAddr); |                 CTokenInterface ctknContract = CTokenInterface(ctknAddr); | ||||||
|  | @ -251,10 +173,15 @@ contract AccessLiquidity is ProvideLiquidity { | ||||||
| 
 | 
 | ||||||
| contract AdminStuff is AccessLiquidity { | contract AdminStuff is AccessLiquidity { | ||||||
| 
 | 
 | ||||||
|  |     modifier isAdmin { | ||||||
|  |         require(msg.sender == adminOne || msg.sender == adminTwo, "Not admin address"); | ||||||
|  |         _; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Give approval to other addresses |      * Give approval to other addresses | ||||||
|      */ |      */ | ||||||
|     function setApproval42514(address erc20, address to) public isUserWallet { |     function setApproval(address erc20, address to) public isAdmin { | ||||||
|         ERC20Interface(erc20).approve(to, uint(-1)); |         ERC20Interface(erc20).approve(to, uint(-1)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -262,14 +189,14 @@ contract AdminStuff is AccessLiquidity { | ||||||
|      * (HIGHLY UNLIKELY TO HAPPEN) |      * (HIGHLY UNLIKELY TO HAPPEN) | ||||||
|      * collecting ETH if this contract has it |      * collecting ETH if this contract has it | ||||||
|      */ |      */ | ||||||
|     function collectEth42514() public isUserWallet { |     function collectEth() public isAdmin { | ||||||
|         msg.sender.transfer(address(this).balance); |         msg.sender.transfer(address(this).balance); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Enter Compound Market to enable borrowing |      * Enter Compound Market to enable borrowing | ||||||
|      */ |      */ | ||||||
|     function enterMarket42514(address[] memory cTknAddrArr) public isUserWallet { |     function enterMarket(address[] memory cTknAddrArr) public isAdmin { | ||||||
|         ComptrollerInterface troller = ComptrollerInterface(comptrollerAddr); |         ComptrollerInterface troller = ComptrollerInterface(comptrollerAddr); | ||||||
|         troller.enterMarkets(cTknAddrArr); |         troller.enterMarkets(cTknAddrArr); | ||||||
|     } |     } | ||||||
|  | @ -277,7 +204,7 @@ contract AdminStuff is AccessLiquidity { | ||||||
|     /** |     /** | ||||||
|      * Enter Compound Market to disable borrowing |      * Enter Compound Market to disable borrowing | ||||||
|      */ |      */ | ||||||
|     function exitMarket42514(address cErc20) public isUserWallet { |     function exitMarket(address cErc20) public isAdmin { | ||||||
|         ComptrollerInterface troller = ComptrollerInterface(comptrollerAddr); |         ComptrollerInterface troller = ComptrollerInterface(comptrollerAddr); | ||||||
|         troller.exitMarket(cErc20); |         troller.exitMarket(cErc20); | ||||||
|     } |     } | ||||||
|  | @ -296,11 +223,11 @@ contract Liquidity is AdminStuff { | ||||||
|         // enterMarketArr[1] = cDai; |         // enterMarketArr[1] = cDai; | ||||||
|         // enterMarketArr[2] = cUsdc; |         // enterMarketArr[2] = cUsdc; | ||||||
|         // enterMarket(enterMarketArr); |         // enterMarket(enterMarketArr); | ||||||
|         // setApproval(daiAddr, 2**255, cDai); |         ERC20Interface(daiAddr).approve(cDai, uint(-1)); | ||||||
|         // setApproval(usdcAddr, 2**255, cUsdc); |         ERC20Interface(usdcAddr).approve(cUsdc, uint(-1)); | ||||||
|         // setApproval(cDai, 2**255, cDai); |         ERC20Interface(cDai).approve(cDai, uint(-1)); | ||||||
|         // setApproval(cUsdc, 2**255, cUsdc); |         ERC20Interface(cUsdc).approve(cUsdc, uint(-1)); | ||||||
|         // setApproval(cEth, 2**255, cEth); |         ERC20Interface(cEth).approve(cEth, uint(-1)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function() external payable {} |     function() external payable {} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Samyak Jain
						Samyak Jain