Restructured Maker Code.

This commit is contained in:
Sowmayjain 2018-10-28 22:29:07 +05:30
parent eb3abe1b98
commit 0961d7f427
3 changed files with 38 additions and 30 deletions

View File

@ -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"),
@ -88,4 +97,4 @@ contract InitRegistry is ManageResolvers {
registry[keccak256(abi.encodePacked("admin"))] = msg.sender; registry[keccak256(abi.encodePacked("admin"))] = msg.sender;
} }
} }

View File

@ -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 {

View File

@ -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);
} }
} }