Fixed a non-vulnerable bug. Every code has bug. Remember.

This commit is contained in:
Sowmayjain 2019-01-25 04:20:49 +05:30
parent e970138500
commit 0b5f247e44

View File

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