Some ERC20 tokens (like USDT) do not work when changing the allowance from an existing non-zero allowance value. For example Tether (USDT)'s approve() function will revert if the current approval is not zero, to protect against front-running changes of approvals.
tsvetanovv
medium
The user can't recive rewards if token is USDT
Summary
The protocol currently these any tokens:
Some tokens will revert when updating the allowance. They must first be approved by zero and then the actual allowance must be approved.
Vulnerability Detail
Тhe problem occurs in
_claimEpochRewards()
:Some ERC20 tokens (like USDT) do not work when changing the allowance from an existing non-zero allowance value. For example Tether (USDT)'s
approve()
function will revert if the current approval is not zero, to protect against front-running changes of approvals.Impact
The protocol will impossible to use USDT token.
Code Snippet
https://github.com/sherlock-audit/2023-06-bond/blob/main/options/src/fixed-strike/liquidity-mining/OTLM.sol#L504
Tool used
Manual Review
Recommendation
It is recommended to set the allowance to zero before increasing the allowance.
Duplicate of #86