mirror of
				https://github.com/Instadapp/InstaContract.git
				synced 2024-07-29 22:47:45 +00:00 
			
		
		
		
	Restructured Maker Code.
This commit is contained in:
		
							parent
							
								
									eb3abe1b98
								
							
						
					
					
						commit
						0961d7f427
					
				|  | @ -1,4 +1,5 @@ | ||||||
| // addresses name - address, asset, resolver, moatkyber, moatmaker, admin | // addresses name - address, asset, resolver, moatkyber, moatmaker, admin | ||||||
|  | // I guess, only keep admin and owner | ||||||
| 
 | 
 | ||||||
| pragma solidity ^0.4.24; | pragma solidity ^0.4.24; | ||||||
| 
 | 
 | ||||||
|  | @ -24,11 +25,18 @@ contract AddressRegistry { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| contract ManageRegistry is AddressRegistry { | contract ManageGovernors is AddressRegistry { | ||||||
| 
 | 
 | ||||||
|     using SafeMath for uint; |     using SafeMath for uint; | ||||||
|     using SafeMath for uint256; |     using SafeMath for uint256; | ||||||
| 
 | 
 | ||||||
|  |     // set governors function goes here with logics | ||||||
|  | 
 | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | contract ManageRegistry is ManageGovernors { | ||||||
|  | 
 | ||||||
|     address public pendingAdmin; |     address public pendingAdmin; | ||||||
|     uint public pendingTime; |     uint public pendingTime; | ||||||
| 
 | 
 | ||||||
|  | @ -45,6 +53,7 @@ contract ManageRegistry is AddressRegistry { | ||||||
|             ); |             ); | ||||||
|             pendingAdmin = newAddr; |             pendingAdmin = newAddr; | ||||||
|             pendingTime = block.timestamp.add(24 * 60 * 60); // adding 24 hours |             pendingTime = block.timestamp.add(24 * 60 * 60); // adding 24 hours | ||||||
|  |             emit AddressChanged(name, newAddr); | ||||||
|         } else { |         } else { | ||||||
|             require( |             require( | ||||||
|                 msg.sender == getAddr("admin"), |                 msg.sender == getAddr("admin"), | ||||||
|  |  | ||||||
|  | @ -33,6 +33,7 @@ contract FeeDetail is Registry { | ||||||
|     function setFees(uint cut) public onlyAdmin { // 200 means 0.5% |     function setFees(uint cut) public onlyAdmin { // 200 means 0.5% | ||||||
|         fees = cut; |         fees = cut; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -45,7 +46,7 @@ contract MoatResolver is FeeDetail { | ||||||
|         setFees(cut); |         setFees(cut); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function collectToken(address tokenAddress, uint amount) public onlyAdmin { |     function collectAssets(address tokenAddress, uint amount) public onlyAdmin { | ||||||
|         if (tokenAddress == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { |         if (tokenAddress == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE) { | ||||||
|             msg.sender.transfer(amount); |             msg.sender.transfer(amount); | ||||||
|         } else { |         } else { | ||||||
|  |  | ||||||
|  | @ -1,10 +1,3 @@ | ||||||
| // mechanism to transfer an existing CDP (2 txn process) |  | ||||||
| // MKR fee when wiped DAI - buy MRK from OasisDEX onchain maybe |  | ||||||
| // global variable to freeze operations like stop locking & drawing |  | ||||||
| // (Think again) |  | ||||||
| // // store MKR tokens on contract by yourself and charge user 1% instead for now |  | ||||||
| // // [Best] Instead user should keep MKR & transferFrom & deduct & return the balance back in 1 Txn |  | ||||||
| 
 |  | ||||||
| pragma solidity 0.4.24; | pragma solidity 0.4.24; | ||||||
| 
 | 
 | ||||||
| import "openzeppelin-solidity/contracts/math/SafeMath.sol"; | import "openzeppelin-solidity/contracts/math/SafeMath.sol"; | ||||||
|  | @ -88,6 +81,8 @@ contract GlobalVar is Registry { | ||||||
| 
 | 
 | ||||||
|     mapping (address => bytes32) public cdps; // borrower >>> CDP Bytes |     mapping (address => bytes32) public cdps; // borrower >>> CDP Bytes | ||||||
| 
 | 
 | ||||||
|  |     bool public freezed; // freeze few important tasks | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | @ -107,12 +102,8 @@ contract IssueLoan is GlobalVar { | ||||||
|             cdps[borrower] = loanMaster.open(); |             cdps[borrower] = loanMaster.open(); | ||||||
|             emit OpenedNewCDP(borrower, cdps[borrower]); |             emit OpenedNewCDP(borrower, cdps[borrower]); | ||||||
|         } |         } | ||||||
|         if (ethLock > 0) { |         if (ethLock > 0) lockETH(borrower, ethLock); | ||||||
|             lockETH(borrower, ethLock); |         if (daiDraw > 0) drawDAI(borrower, daiDraw); | ||||||
|         } |  | ||||||
|         if (daiDraw > 0) { |  | ||||||
|             drawDAI(borrower, daiDraw); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function lockETH(address borrower, uint ethLock) public payable { |     function lockETH(address borrower, uint ethLock) public payable { | ||||||
|  | @ -125,6 +116,7 @@ contract IssueLoan is GlobalVar { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function drawDAI(address borrower, uint daiDraw) public onlyUserOrResolver(borrower) { |     function drawDAI(address borrower, uint daiDraw) public onlyUserOrResolver(borrower) { | ||||||
|  |         require(!freezed, "Operation Disabled"); | ||||||
|         loanMaster.draw(cdps[borrower], daiDraw); |         loanMaster.draw(cdps[borrower], daiDraw); | ||||||
|         uint fees = deductFees(daiDraw); |         uint fees = deductFees(daiDraw); | ||||||
|         IERC20 tokenFunctions = IERC20(dai); |         IERC20 tokenFunctions = IERC20(dai); | ||||||
|  | @ -157,43 +149,48 @@ contract RepayLoan is IssueLoan { | ||||||
|     function repay( |     function repay( | ||||||
|         address borrower, |         address borrower, | ||||||
|         uint daiWipe, |         uint daiWipe, | ||||||
|  |         uint mkrFees, | ||||||
|         uint ethFree |         uint ethFree | ||||||
|     ) public onlyUserOrResolver(borrower) |     ) public onlyUserOrResolver(borrower) | ||||||
|     { |     { | ||||||
|         if (daiWipe > 0) { |         if (daiWipe > 0) wipeDAI(borrower, daiWipe, mkrFees); | ||||||
|             wipeDAI(borrower, daiWipe); |         if (ethFree > 0) unlockETH(borrower, ethFree); | ||||||
|         } |  | ||||||
|         if (ethFree > 0) { |  | ||||||
|             unlockETH(borrower, ethFree); |  | ||||||
|         } |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function wipeDAI(address borrower, uint daiWipe) public { |     function wipeDAI(address borrower, uint daiWipe, uint mkrFees) public { | ||||||
|         IERC20 tokenFunction = IERC20(dai); | 
 | ||||||
|         tokenFunction.transferFrom(msg.sender, address(this), daiWipe); |         // MKR tokens to pay the debt fees | ||||||
|  |         // difference between MKR fees and transferred amount stays with contract | ||||||
|  |         IERC20 mkrToken = IERC20(mkr); | ||||||
|  |         mkrToken.transferFrom(borrower, address(this), mkrFees); | ||||||
|  | 
 | ||||||
|  |         // DAI to pay the debt | ||||||
|  |         IERC20 daiToken = IERC20(dai); | ||||||
|  |         daiToken.transferFrom(borrower, address(this), daiWipe); | ||||||
|         loanMaster.wipe(cdps[borrower], daiWipe); |         loanMaster.wipe(cdps[borrower], daiWipe); | ||||||
|  | 
 | ||||||
|         emit WipedDAI(borrower, daiWipe); |         emit WipedDAI(borrower, daiWipe); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     function unlockETH(address borrower, uint ethFree) public onlyUserOrResolver(borrower) { |     function unlockETH(address borrower, uint ethFree) public onlyUserOrResolver(borrower) { | ||||||
|  |         require(!freezed, "Operation Disabled"); | ||||||
|         uint pethToUnlock = ratioedPETH(ethFree); |         uint pethToUnlock = ratioedPETH(ethFree); | ||||||
|         loanMaster.free(cdps[borrower], pethToUnlock); // CDP to PETH |         loanMaster.free(cdps[borrower], pethToUnlock); // CDP to PETH | ||||||
|         loanMaster.exit(pethToUnlock); // PETH to WETH |         loanMaster.exit(pethToUnlock); // PETH to WETH | ||||||
|         WETHFace wethFunction = WETHFace(weth); |         WETHFace wethFunction = WETHFace(weth); | ||||||
|         wethFunction.withdraw(ethFree); // WETH to ETH |         wethFunction.withdraw(ethFree); // WETH to ETH | ||||||
|         msg.sender.transfer(ethFree); |         borrower.transfer(ethFree); | ||||||
|         emit UnlockedETH(borrower, ethFree); |         emit UnlockedETH(borrower, ethFree); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // function freeETH |  | ||||||
|     //     free(bytes32 cup, uint wad) |  | ||||||
| 
 |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| contract BorrowTasks is RepayLoan { | contract BorrowTasks is RepayLoan { | ||||||
| 
 | 
 | ||||||
|     // transfer existing CDP 2 txn process |     function freeze(bool stop) public onlyAdmin { | ||||||
|  |         freezed = stop; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|     function claimCDP(address nextOwner) public { |     function claimCDP(address nextOwner) public { | ||||||
|         require(nextOwner != 0, "Invalid Address."); |         require(nextOwner != 0, "Invalid Address."); | ||||||
|  | @ -210,6 +207,7 @@ contract BorrowTasks is RepayLoan { | ||||||
|         IERC20 daiTkn = IERC20(dai); |         IERC20 daiTkn = IERC20(dai); | ||||||
|         daiTkn.approve(cdpAddr, 2**256 - 1); |         daiTkn.approve(cdpAddr, 2**256 - 1); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Sowmayjain
						Sowmayjain