The redeem() and redeemAll() functions in the ZENO contract assume a 1:1 conversion between ZENO and USDC. However, ZENO is an ERC-20 token that likely uses 18 decimals, whereas USDC typically uses 6 decimals. This discrepancy could lead to incorrect redemption amounts due to improper scaling.
In both redeem() and redeemAll(), the contract transfers amount of USDC equivalent to the ZENO tokens burned. The relevant code is:
ZENO has 18 decimals and USDC has 6, the transferred amount will be 1e12 times higher than expected, leading to excessive token transfers and potential loss of funds for the protocol.
If this contract is deployed as-is:
Users may redeem far more USDC than intended, draining the contract’s USDC balance quickly.
The contract may become insolvent as it won’t have enough USDC to fulfill all redemptions.
Manual Review
To ensure proper scaling, adjust the transferred USDC amount by considering the difference in decimal places:
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.