CapitalPool::approve
approves the TokenManager
to spend type(uint256).max
amount of the token passed as parameter:
There are tokens that don't support approve spender type(uint256).max
amount. So the CapitalPool::approve
will not work for some tokens like UNI
or COMP
who will revert when approve type(uint256).max
amount.
Tokens that don't support approve type(uint256).max
amount can not be transferred from CapitalPool
. All withdraws will fail since TokenManager::withdraw
needs approve from CapitalPool
to transfer the tokens to the users.
Manual Review
Approve only the necessary amount of token instead of the type(uint256).max
amount
Thanks for flagging, indeed since uint(-1) is representative of max uint256 value, when entering the `if` statement, it will be converted to uint96 max amout, so it will not revert as described. In issue #361, the mockToken utilized does not correctly reflect the below approval behavior. ```Solidity function approve(address spender, uint rawAmount) external returns (bool) { uint96 amount; if (rawAmount == uint(-1)) { amount = uint96(-1); } else { amount = safe96(rawAmount, "Comp::approve: amount exceeds 96 bits"); } ```
Thanks for flagging, indeed since uint(-1) is representative of max uint256 value, when entering the `if` statement, it will be converted to uint96 max amout, so it will not revert as described. In issue #361, the mockToken utilized does not correctly reflect the below approval behavior. ```Solidity function approve(address spender, uint rawAmount) external returns (bool) { uint96 amount; if (rawAmount == uint(-1)) { amount = uint96(-1); } else { amount = safe96(rawAmount, "Comp::approve: amount exceeds 96 bits"); } ```
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.