The function could be made to return int128. Just in case _coveredDebtOf(streamId)
> streams[streamId].balance
. The functions which utilize _refundableAmountOf
should have an if statement
function _refundableAmountOf(uint256 streamId) internal view returns (int128) {
return int128(_streams[streamId].balance - _coveredDebtOf(streamId));
}
function _refund(uint256 streamId, uint128 amount) internal {
if (amount == 0) {
revert Errors.SablierFlow_RefundAmountZero(streamId);
}
int128 refundableAmount = _refundableAmountOf(streamId);
if (refundableAmount > 0){
if (amount > uint128(refundableAmount)) {
revert Errors.SablierFlow_RefundOverflow(streamId, amount, refundableAmount);
}
if (uint128(refundableAmount) > _streams[streamId].balance) {
revert Errors.SablierFlow_InvalidCalculation(streamId, _streams[streamId].balance, amount);
}
address sender = _streams[streamId].sender;
IERC20 token = _streams[streamId].token;
unchecked {
_streams[streamId].balance -= amount;
aggregateBalance[token] -= amount;
}
token.safeTransfer({ to: sender, value: amount });
emit ISablierFlow.RefundFromFlowStream(streamId, sender, amount);
}
}