---
# System prepended metadata

title: Findings BorrowManager test

---



## 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, т.к. там в куче мест реентранси