`Cooler.roll()` wouldn't work as expected when `newCollateral = 0`.
`Cooler.roll()` is used to increase the loan duration by transferring the additional collateral.\\nBut there will be some problems when `newCollateral = 0`.\\n```\\n    function roll (uint256 loanID) external {\\n        Loan storage loan = loans[loanID];\\n        Request memory req = loan.request;\\n\\n        if (block.timestamp > loan.expiry) \\n            revert Default();\\n\\n        if (!loan.rollable)\\n            revert NotRollable();\\n\\n        uint256 newCollateral = collateralFor(loan.amount, req.loanToCollateral) - loan.collateral;\\n        uint256 newDebt = interestFor(loan.amount, req.interest, req.duration);\\n\\n        loan.amount += newDebt;\\n        loan.expiry += req.duration;\\n        loan.collateral += newCollateral;\\n        \\n        collateral.transferFrom(msg.sender, address(this), newCollateral); //@audit 0 amount\\n    }\\n```\\n\\nIn `roll()`, it transfers the `newCollateral` amount of collateral to the contract.\\nAfter the borrower repaid most of the debts, `loan.amount` might be very small and `newCollateral` for the original interest might be 0 because of the rounding issue.\\nThen as we can see from this one, some tokens might revert for 0 amount and `roll()` wouldn't work as expected.
I think we should handle it differently when `newCollateral = 0`.\\nAccording to impact 2, I think it would be good to revert when `newCollateral = 0`.
There will be 2 impacts.\\nWhen the borrower tries to extend the loan using `roll()`, it will revert with the weird tokens when `newCollateral = 0`.\\nAfter the borrower noticed he couldn't repay anymore(so the lender will default the loan), the borrower can call `roll()` again when `newCollateral = 0`. In this case, the borrower doesn't lose anything but the lender must wait for `req.duration` again to default the loan.
```\\n    function roll (uint256 loanID) external {\\n        Loan storage loan = loans[loanID];\\n        Request memory req = loan.request;\\n\\n        if (block.timestamp > loan.expiry) \\n            revert Default();\\n\\n        if (!loan.rollable)\\n            revert NotRollable();\\n\\n        uint256 newCollateral = collateralFor(loan.amount, req.loanToCollateral) - loan.collateral;\\n        uint256 newDebt = interestFor(loan.amount, req.interest, req.duration);\\n\\n        loan.amount += newDebt;\\n        loan.expiry += req.duration;\\n        loan.collateral += newCollateral;\\n        \\n        collateral.transferFrom(msg.sender, address(this), newCollateral); //@audit 0 amount\\n    }\\n```\\n