https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/TokenManager.sol#L233
The _transfer
function in the TokenManager
contract encounters issues when dealing with ERC20 tokens that have a fee on transfer. The function assumes that the amount specified for transfer is exactly what will be received, which may not hold true if the token imposes a transfer fee. This discrepancy can lead to unexpected behavior and failed transactions.
The _transfer
function checks the token balances before and after the transfer to validate the success of the operation. However, this approach assumes that the amount of tokens sent is the same as the amount received. For tokens with a fee on transfer, the amount received by the destination address will be less than the amount sent. This discrepancy can cause the function to revert due to the failed balance checks.
The function may incorrectly revert transactions if the token implements a fee on transfer, causing DOS in operations that rely on this function. Users might lose tokens due to failed transfers or incorrect calculations if the function does not account for transfer fees.
Manual Review
Modify the _transfer
function to account for the potential fee deducted during the transfer. Instead of comparing exact amounts, allow for a small tolerance to accommodate fees.
Valid medium, there are disruptions to the ability to take market actions. The following functions will be disrupted without the possibiliy of reaching settlement, since the respective offers cannot be created/listed regardless of mode when transferring collateral token required to the CapitalPool contract or when refunding token from user to capital pool during relisting. So withdrawal is not an issue - `createOffer()` - reverts [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L96-L102) - `listOffer()` - reverts [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L355-L362) - `relistOffer()` - reverts [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L515-L521) - `createTaker()` - reverts [here](https://github.com/Cyfrin/2024-08-tadle/blob/04fd8634701697184a3f3a5558b41c109866e5f8/src/core/PreMarkets.sol#L831-L836) I believe medium severity is appropriate although the likelihood is high and impact is medium (only some level of disruption i.e. FOT tokens not supported and no funds at risk)
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.