Contract like CapitalPool.sol
, DeliveryPlace.sol
, PreMarkets.sol
, SystemConfig.sol
, and TokenManager.sol
inherits Rescuable.sol
. While erc20 like a USDT not returning a boolean for transfer
and transferFrom
function, this will lead to DoS for various function like TokenManager::tillIn
, TokenManager::withdraw
, TokenManager::rescue
, etc.
Unlike standard ERC20 tokens, which return a boolean value upon executing transfer
and transferFrom
operations and revert the transaction in case of failure, USDT lacks this important feature.
USDT's transfer
and transferFrom
functions do not return a boolean value. Instead, they simply calculate the fee and update the main state for transferring tokens without providing any return value.
The problem is this will make the function revert because it creates bool success
as returned value but nothing is returned because the USDT transfer mechanism.
Therefore the next check to ensure success return truthy value will not be used and useless in this case.
DoS for function which inherits Rescuable::_safe_transfer
and Rescuable::_safe_transfer_from
function.
Manual Review
Consider using safeTransfer
and safeTransferFrom
from SafeERC20 library by Openzeppelin to tackle this issue.
I believe the issues and duplicates do not warrant low severity severity as even if the call to transfers returns false instead of reverting, there is no impact as it is arguably correct given there will be insufficient funds to perform a rescue/withdrawal. This will not affect `tillIn()` as there are explicit balance [checks that revert accordingly](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/TokenManager.sol#L255-L260) to prevent allowing creation of offers without posting the necessary collateral
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
Appeals are being carefully reviewed by our judges.