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