Different ERC-20 token implementations behave differently regarding the actual amount received when transferring tokens. For example, USDT on Ethereum (Fee on Transfer Token) can charge a fee when transferring ERC-20 tokens, meanwhile, STA (Deflationary Token) burns a certain percentage of the transferred amount.
These types of tokens (collectively known as Weird ERC20 tokens) are currently not applicable to the logic of the current Tadle contracts.
Let's look at the TokenManager.sol contract's _transfer() internal function :
In the above function, after invoking _safe_transfer_from() function (essentially calling the ERC20 contract function using TRANSFER_FROM_SELECTOR in Rescuable.sol contract), there is a logic to check whether the balance delta between before and after transfer of _from address and _to address is exactly equal to amount or not.
As mentioned in the summary section, there are some tokens that, although still comply with the ERC20 standard, customize the logic of the transfer function according to their business logic. This customization leads to the fact that the actual amount sent to the _to address will not be equal to the input amount and it will not pass the delta balance check logic mentioned above.
All current Tadle's features when applied to Weird ERC20 Tokens will always revert TransferFailed()
Manually Review
Solution 1: Remove the logic checking balance delta before and after performing token transfer of TokenManager.sol contract's _transfer() internal function.
Solution 2: Disallow Weird ERC20 tokens to be used on Tadle marketplace (not added to token whitelist)
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.