Use safeTransfer/safeTransferFrom consistently instead of transfer/transferFrom
Use safeTransfer/safeTransferFrom consistently instead of transfer/transferFrom\\n```\\n    function clear (uint256 reqID) external returns (uint256 loanID) {\\n        Request storage req = requests[reqID];\\n\\n        factory.newEvent(reqID, CoolerFactory.Events.Clear);\\n\\n        if (!req.active) \\n            revert Deactivated();\\n        else req.active = false;\\n\\n        uint256 interest = interestFor(req.amount, req.interest, req.duration);\\n        uint256 collat = collateralFor(req.amount, req.loanToCollateral);\\n        uint256 expiration = block.timestamp + req.duration;\\n\\n        loanID = loans.length;\\n        loans.push(\\n            Loan(req, req.amount + interest, collat, expiration, true, msg.sender)\\n        );\\n        debt.transferFrom(msg.sender, owner, req.amount);\\n    }\\n```\\n
Consider using safeTransfer/safeTransferFrom consistently.
If the token send fails, it will cause a lot of serious problems. For example, in the clear function, if debt token is ZRX, the lender can clear request without providing any debt token.
```\\n    function clear (uint256 reqID) external returns (uint256 loanID) {\\n        Request storage req = requests[reqID];\\n\\n        factory.newEvent(reqID, CoolerFactory.Events.Clear);\\n\\n        if (!req.active) \\n            revert Deactivated();\\n        else req.active = false;\\n\\n        uint256 interest = interestFor(req.amount, req.interest, req.duration);\\n        uint256 collat = collateralFor(req.amount, req.loanToCollateral);\\n        uint256 expiration = block.timestamp + req.duration;\\n\\n        loanID = loans.length;\\n        loans.push(\\n            Loan(req, req.amount + interest, collat, expiration, true, msg.sender)\\n        );\\n        debt.transferFrom(msg.sender, owner, req.amount);\\n    }\\n```\\n