The ZENO contract lets users redeem USDC after it matures. The functions transfer USDC equilvalent to the amount of ZENO burned. However, since USDC has 6 decimals and ZENO has 18, (decimals is not overridden, the default decimals of openzeppelin's ERC20 is 18), for 1 ZENO burned, users will receive 1e18 of USDC, ~1000000000000 USDC.
In redeem() and redeemAll(),
This lets anyone gain 1e12 more USDC per 1 of ZENO, effectively draining the contract
Manual Review
Override the decimals() of ZENO and make it 6, or account for decimals before transferring USDC.
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.