From dac3be57fea025a4f0c1e823ef1962f01fd1270e Mon Sep 17 00:00:00 2001 From: Sowmay Jain Date: Mon, 31 Aug 2020 03:08:40 +1000 Subject: [PATCH] fixed deposit bug --- contracts/pools/erc20.sol | 15 ++++++++------- contracts/pools/eth.sol | 17 +++++++++-------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/contracts/pools/erc20.sol b/contracts/pools/erc20.sol index d68b356..a5144a8 100644 --- a/contracts/pools/erc20.sol +++ b/contracts/pools/erc20.sol @@ -35,7 +35,7 @@ contract PoolToken is ReentrancyGuard, DSMath, ERC20Pausable { event LogDeploy(address token, uint amount); event LogExchangeRate(uint exchangeRate, uint tokenBalance, uint insuranceAmt); - event LogSettle(uint settleTime); + event LogSettle(uint settleBlock); event LogDeposit(uint depositAmt, uint poolMintAmt); event LogWithdraw(uint withdrawAmt, uint poolBurnAmt, uint feeAmt); event LogAddInsurance(uint amount); @@ -68,11 +68,11 @@ contract PoolToken is ReentrancyGuard, DSMath, ERC20Pausable { function deploy(address _dsa, address token, uint amount) public isChief { require(registry.isDsa(address(this), _dsa), "not-autheticated-dsa"); require(AccountInterface(_dsa).isAuth(address(this)), "token-pool-not-auth"); - if (token == address(0)) { + if (token == address(0)) { // pool base token baseToken.safeTransfer(_dsa, amount); - } else if (token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE){ + } else if (token == 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE){ // non-pool ethereum payable(_dsa).transfer(amount); - } else { + } else { // non-pool other tokens IERC20(token).safeTransfer(_dsa, amount); } emit LogDeploy(token, amount); @@ -122,13 +122,12 @@ contract PoolToken is ReentrancyGuard, DSMath, ERC20Pausable { dsaWallet.cast(_targets, _datas, _origin); } require(dsaWallet.isAuth(address(this)), "token-pool-not-auth"); - setExchangeRate(); - emit LogSettle(block.timestamp); + emit LogSettle(block.number); } function deposit(uint tknAmt) external whenNotPaused payable returns(uint) { - uint _newTokenBal = add(tokenBalance, tknAmt); + tokenBalance = add(tokenBalance, tknAmt); baseToken.safeTransferFrom(msg.sender, address(this), tknAmt); uint _mintAmt = wmul(tknAmt, exchangeRate); @@ -152,6 +151,8 @@ contract PoolToken is ReentrancyGuard, DSMath, ERC20Pausable { _tknAmt = tknAmt; } + tokenBalance = sub(tokenBalance, _tknAmt); + _burn(msg.sender, _burnAmt); uint _withdrawalFee = registry.withdrawalFee(address(this)); diff --git a/contracts/pools/eth.sol b/contracts/pools/eth.sol index 3e0bea7..c27b02b 100644 --- a/contracts/pools/eth.sol +++ b/contracts/pools/eth.sol @@ -35,7 +35,7 @@ contract PoolToken is ReentrancyGuard, ERC20Pausable, DSMath { event LogDeploy(address indexed token, uint amount); event LogExchangeRate(uint exchangeRate, uint tokenBalance, uint insuranceAmt); - event LogSettle(uint settleTime); + event LogSettle(uint settleBlock); event LogDeposit(uint depositAmt, uint poolMintAmt); event LogWithdraw(uint withdrawAmt, uint poolBurnAmt, uint feeAmt); event LogAddInsurance(uint amount); @@ -66,10 +66,10 @@ contract PoolToken is ReentrancyGuard, ERC20Pausable, DSMath { function deploy(address _dsa, address token, uint amount) external isChief { require(registry.isDsa(address(this), _dsa), "not-autheticated-dsa"); - require(AccountInterface(_dsa).isAuth(address(this)), "token-pool-not-auth"); - if (token == address(0)) { + require(AccountInterface(_dsa).isAuth(address(this)), "token-pool-not-auth"); + if (token == address(0)) { // pool base ETH payable(_dsa).transfer(amount); - } else { + } else { // non-pool other tokens IERC20(token).safeTransfer(_dsa, amount); } emit LogDeploy(token, amount); @@ -118,15 +118,14 @@ contract PoolToken is ReentrancyGuard, ERC20Pausable, DSMath { if (_targets.length > 0 && _datas.length > 0) { dsaWallet.cast(_targets, _datas, _origin); } - require(dsaWallet.isAuth(address(this)), "token-pool-not-auth"); + require(dsaWallet.isAuth(address(this)), "token-pool-not-auth"); setExchangeRate(); - - emit LogSettle(block.timestamp); + emit LogSettle(block.number); } function deposit(uint tknAmt) public whenNotPaused payable returns(uint) { require(tknAmt == msg.value, "unmatched-amount"); - uint _newTokenBal = add(tokenBalance, msg.value); + tokenBalance = add(tokenBalance, tknAmt); uint _mintAmt = wmul(msg.value, exchangeRate); _mint(msg.sender, _mintAmt); @@ -149,6 +148,8 @@ contract PoolToken is ReentrancyGuard, ERC20Pausable, DSMath { _tknAmt = tknAmt; } + tokenBalance = sub(tokenBalance, _tknAmt); + _burn(msg.sender, _burnAmt); uint _withdrawalFee = registry.withdrawalFee(address(this));