mirror of
https://github.com/Instadapp/InstaContract.git
synced 2024-07-29 22:47:45 +00:00
Fixed a non-vulnerable bug. Every code has bug. Remember.
This commit is contained in:
parent
e970138500
commit
0b5f247e44
|
@ -95,15 +95,21 @@ contract GlobalVar is Registry {
|
||||||
using SafeMath for uint256;
|
using SafeMath for uint256;
|
||||||
|
|
||||||
bytes32 blankCDP = 0x0000000000000000000000000000000000000000000000000000000000000000;
|
bytes32 blankCDP = 0x0000000000000000000000000000000000000000000000000000000000000000;
|
||||||
address cdpAddr; // cups
|
address cdpAddr; // SaiTub
|
||||||
mapping (address => bytes32) cdps; // borrower >>> CDP Bytes
|
mapping (uint => address) cdps; // CDP Number >>> Borrower
|
||||||
bool public freezed;
|
bool public freezed;
|
||||||
|
|
||||||
|
modifier isCupOwner(uint cdpNum) {
|
||||||
|
require(cdps[cdpNum] == msg.sender, "Permission Denied");
|
||||||
|
_;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
contract IssueLoan is GlobalVar {
|
contract IssueLoan is GlobalVar {
|
||||||
|
|
||||||
|
// uint cdpNum
|
||||||
event LockedETH(address borrower, uint lockETH, uint lockPETH, address lockedBy);
|
event LockedETH(address borrower, uint lockETH, uint lockPETH, address lockedBy);
|
||||||
event LoanedDAI(address borrower, uint loanDAI, address payTo);
|
event LoanedDAI(address borrower, uint loanDAI, address payTo);
|
||||||
event NewCDP(address borrower, bytes32 cdpBytes);
|
event NewCDP(address borrower, bytes32 cdpBytes);
|
||||||
|
@ -113,36 +119,38 @@ contract IssueLoan is GlobalVar {
|
||||||
rPETH = (ethNum.mul(10 ** 27)).div(loanMaster.per());
|
rPETH = (ethNum.mul(10 ** 27)).div(loanMaster.per());
|
||||||
}
|
}
|
||||||
|
|
||||||
function borrow(uint daiDraw, address beneficiary) public payable {
|
function borrow(uint cdpNum, uint daiDraw, address beneficiary) public payable {
|
||||||
if (msg.value > 0) {lockETH(msg.sender);}
|
if (msg.value > 0) {lockETH(cdpNum, msg.sender);}
|
||||||
if (daiDraw > 0) {drawDAI(daiDraw, beneficiary);}
|
if (daiDraw > 0) {drawDAI(cdpNum, daiDraw, beneficiary);}
|
||||||
}
|
}
|
||||||
|
|
||||||
function lockETH(address borrower) public payable {
|
function lockETH(uint cdpNum, address borrower) public payable {
|
||||||
|
bytes32 cup = bytes32(cdpNum);
|
||||||
MakerCDP loanMaster = MakerCDP(cdpAddr);
|
MakerCDP loanMaster = MakerCDP(cdpAddr);
|
||||||
if (cdps[borrower] == blankCDP) {
|
// if (cdps[borrower] == blankCDP) {
|
||||||
require(msg.sender == borrower, "Creating CDP for others is not permitted at the moment.");
|
// require(msg.sender == borrower, "Creating CDP for others is not permitted at the moment.");
|
||||||
cdps[msg.sender] = loanMaster.open();
|
// cdps[msg.sender] = loanMaster.open();
|
||||||
emit NewCDP(msg.sender, cdps[msg.sender]);
|
// emit NewCDP(msg.sender, cdps[msg.sender]);
|
||||||
}
|
// }
|
||||||
WETHFace wethTkn = WETHFace(getAddress("weth"));
|
WETHFace wethTkn = WETHFace(getAddress("weth"));
|
||||||
wethTkn.deposit.value(msg.value)(); // ETH to WETH
|
wethTkn.deposit.value(msg.value)(); // ETH to WETH
|
||||||
uint pethToLock = pethPEReth(msg.value);
|
uint pethToLock = pethPEReth(msg.value);
|
||||||
loanMaster.join(pethToLock); // WETH to PETH
|
loanMaster.join(pethToLock); // WETH to PETH
|
||||||
loanMaster.lock(cdps[borrower], pethToLock); // PETH to CDP
|
loanMaster.lock(cup, pethToLock); // PETH to CDP
|
||||||
emit LockedETH(
|
emit LockedETH(
|
||||||
borrower, msg.value, pethToLock, msg.sender
|
borrower, msg.value, pethToLock, msg.sender
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawDAI(uint daiDraw, address beneficiary) public {
|
function drawDAI(uint cdpNum, uint daiDraw, address beneficiary) public {
|
||||||
|
bytes32 cup = bytes32(cdpNum);
|
||||||
require(!freezed, "Operation Disabled");
|
require(!freezed, "Operation Disabled");
|
||||||
MakerCDP loanMaster = MakerCDP(cdpAddr);
|
MakerCDP loanMaster = MakerCDP(cdpAddr);
|
||||||
loanMaster.draw(cdps[msg.sender], daiDraw);
|
loanMaster.draw(cup, daiDraw);
|
||||||
IERC20 daiTkn = IERC20(getAddress("dai"));
|
IERC20 daiTkn = IERC20(getAddress("dai"));
|
||||||
address payTo = msg.sender;
|
address payTo = beneficiary;
|
||||||
if (payTo != address(0)) {
|
if (beneficiary != address(0)) {
|
||||||
payTo = beneficiary;
|
payTo = msg.sender;
|
||||||
}
|
}
|
||||||
daiTkn.transfer(payTo, daiDraw);
|
daiTkn.transfer(payTo, daiDraw);
|
||||||
emit LoanedDAI(msg.sender, daiDraw, payTo);
|
emit LoanedDAI(msg.sender, daiDraw, payTo);
|
||||||
|
@ -228,6 +236,8 @@ contract BorrowTasks is RepayLoan {
|
||||||
event TranferCDP(bytes32 cdp, address owner, address nextOwner);
|
event TranferCDP(bytes32 cdp, address owner, address nextOwner);
|
||||||
event CDPClaimed(bytes32 cdp, address owner);
|
event CDPClaimed(bytes32 cdp, address owner);
|
||||||
|
|
||||||
|
// nextOwner - transfer CDP owner internally.
|
||||||
|
|
||||||
function transferCDP(address nextOwner) public {
|
function transferCDP(address nextOwner) public {
|
||||||
require(nextOwner != 0, "Invalid Address.");
|
require(nextOwner != 0, "Invalid Address.");
|
||||||
MakerCDP loanMaster = MakerCDP(cdpAddr);
|
MakerCDP loanMaster = MakerCDP(cdpAddr);
|
||||||
|
@ -270,7 +280,7 @@ contract BorrowTasks is RepayLoan {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
contract InstaMaker is BorrowTasks {
|
contract InstaBank is BorrowTasks {
|
||||||
|
|
||||||
event MKRCollected(uint amount);
|
event MKRCollected(uint amount);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user