ERC20 TOKENS WITH DIFFERENT DECIMALS THAN 18 MAY BREAK THE LOGIC AND PROVIDE UNEXPECTED RESULTS #488
Labels
2 (Med Risk)
Assets not at direct risk, but function/availability of the protocol could be impacted or leak value
bug
Something isn't working
duplicate-141
satisfactory
satisfies C4 submission criteria; eligible for awards
Lines of code
https://github.com/code-423n4/2022-12-caviar/blob/main/src/LpToken.sol#L13
https://github.com/code-423n4/2022-12-caviar/blob/main/src/Pair.sol#L46
https://github.com/code-423n4/2022-12-caviar/blob/main/src/Pair.sol#L20
Vulnerability details
Impact
Note: Though it is mentioned that Rebase/fee-on-transfer tokens are not expected, however there exist other ERC20 tokens having different decimals than 18
Contracts
LpToken
andPair
performs calculations by using hardcoded value of decimals18
(1e18) for ERC20 tokens. This could break the logic and would provide unexpected results throughout the contract on using ERC20 tokens with different decimals than18
. Example of such a token is Gemini USD only have 2 decimals,YAM-V2
has 24 decimals.Hardcoded decimal value of 18 being used:
https://github.com/code-423n4/2022-12-caviar/blob/main/src/Pair.sol
https://github.com/code-423n4/2022-12-caviar/blob/main/src/LpToken.sol#L13
Recommended Mitigation Steps
It is recommended to add support for different number of decimals than
18
by dynamically checkingdecimals()
for the tokens that are part of the rewards calculations. Alternatively if such a support is not needed, new require statements should be added toaddPool
that will be checking that the number of decimals for all ERC20 tokens is18
.The text was updated successfully, but these errors were encountered: