## CRIT
суровый крит
1) надо взять большой борроу из любого пула, уменьшается баланс андрелаинга в пуле
1) потом сделать в него депозит, а шейры считаются от текущего баланса токенов - их там мало после борроу, значит выпишется огромное число шейров
3) Далее делаем репэй долга с закрытие позиции и возвращаем значение баланса в прежнее положение. 4) Делаем redeem своих шейрсов, забираем все средства из пула.
## CRIT
ошибка в редиме пула
в берн передается эмоунт, надо шейрс/lpAmount
```
function redeem(uint256 _lpAmount) external {
require(_lpAmount > 0, "INCORRECT_REDEEM");
uint256 amount = _lpAmount * IERC20Ext(underlying).balanceOf(address(this)) / totalSupply;
require(amount > 0, "INCORRECT_AMOUNT");
IERC20Ext(underlying).transfer(msg.sender, amount);
_burn(msg.sender, amount);
}
```
## CRIT
LP не умеет зарабтывать проценты, и скорее всего не сможет репэи совершить последние
в borrow у нас
`totalBorrowed += _amount`
а в repay
`totalBorrowed -= _amount`
но через репэй возвращается больше средств, т.к. долги возвращаются с процентами
поэтому totalBorrowed уйдет в андерфлоу
## HIGH
bm.repay()
для сценария когда close=True
```
require(leverageInfo[msg.sender][_token].borrowAmount == 0, "UNABLE_TO_CLOSE");
ILiquidityPool(registeredTokens[_token]).repay(
leverageInfo[msg.sender][_token].leverageAmount + _amount,
msg.sender
);
leverageInfo[msg.sender][_token].leverageAmount = 0;
uint256 base = IERC20Ext(_token).balanceOf(msg.sender);
IERC20Ext(_token).transferFrom(msg.sender, registeredAccounts[msg.sender], base)`
```
Сперва делаем lp.repay(тело+процент)
Внутри этой функции тело+процент пересылают в LP из аккаунта
Затем base = баланс аакаунта
Пересылаем этот баланс на registeredAccounts[msg.sender], а это оунер аккаунта.
То есть мы еще и весь коллатерал возвращаем юзеру
Что неправильно, ведь этот коллатерал может являться обеспечением других позиций для долга взятого в других токенах
У нас в итоге нет способа уменьшить свой долг не убрав еще весь коллатерал в этой токене
Это ошибка скорее всего
## HIGH
_updateBorrow
не начислят процент если успевать делать новую операцию с течение суток после предыдущей операции
## MEDIUM
lp.deposit
атака Кости
## LOW
очень странная конструкция в healthFactor
наверное второй аргумент имелся ввиду totalCollateral
```
if ((totalUnpayed == 0) && (totalUnpayed == 0)) {
return 11111;
}
```
## LOW
конечно же нельзя токены типо USDT
конечно же нельзя ERC777, т.к. там в куче мест реентранси