From f8c117c513c0ee08c4d091ac31644b398c2557fa Mon Sep 17 00:00:00 2001 From: Samyak Jain <34437877+KaymasJain@users.noreply.github.com> Date: Sat, 29 Aug 2020 03:56:34 +1000 Subject: [PATCH] updated is loss is greater than insurance amount --- contracts/pools/erc20.sol | 9 +++++++-- contracts/pools/eth.sol | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/contracts/pools/erc20.sol b/contracts/pools/erc20.sol index 8615077..286d68c 100644 --- a/contracts/pools/erc20.sol +++ b/contracts/pools/erc20.sol @@ -87,8 +87,13 @@ contract PoolToken is ReentrancyGuard, DSMath, ERC20Pausable { require(_currentRate != 0, "currentRate-is-0"); if (_currentRate > _previousRate) { uint difTkn = sub(tokenBalance, _totalToken); - insuranceAmt = sub(insuranceAmt, difTkn); - _currentRate = _previousRate; + if (difTkn < insuranceAmt) { + insuranceAmt = sub(insuranceAmt, difTkn); + _currentRate = _previousRate; + } else { + tokenBalance = add(_totalToken, insuranceAmt); + _currentRate = wdiv(totalSupply(), tokenBalance); + } } else { uint insureFeeAmt = wmul(sub(_totalToken, tokenBalance), registry.insureFee(address(this))); insuranceAmt = add(insuranceAmt, insureFeeAmt); diff --git a/contracts/pools/eth.sol b/contracts/pools/eth.sol index 18f5ace..b111308 100644 --- a/contracts/pools/eth.sol +++ b/contracts/pools/eth.sol @@ -82,8 +82,13 @@ contract PoolToken is ReentrancyGuard, ERC20Pausable, DSMath { require(_currentRate != 0, "currentRate-is-0"); if (_currentRate > _previousRate) { uint difTkn = sub(tokenBalance, _totalToken); - insuranceAmt = sub(insuranceAmt, difTkn); - _currentRate = _previousRate; + if (difTkn < insuranceAmt) { + insuranceAmt = sub(insuranceAmt, difTkn); + _currentRate = _previousRate; + } else { + tokenBalance = add(_totalToken, insuranceAmt); + _currentRate = wdiv(totalSupply(), tokenBalance); + } } else { uint insureFeeAmt = wmul(sub(_totalToken, tokenBalance), registry.insureFee(address(this))); insuranceAmt = add(insuranceAmt, insureFeeAmt);