The ZENO contract's redeem() function fails to handle decimal precision differences between ZENO (18 decimals) and USDC (6 decimals) tokens, potentially causing transfers of 1000x more USDC than intended or failed redemptions.
In the ZENO contract:
Example 1: Redeeming 1.0 ZENO
amount = 1e18 (1 ZENO)
Current transfer: 1e18 USDC (1 trillion USDC)
Expected transfer: 1e6 USDC (1 USDC)
Example 2: Redeeming 100 ZENO
amount = 100e18 (100 ZENO)
Current transfer: 100e18 USDC (100 trillion USDC)
Expected transfer: 100e6 USDC (100 USDC)
Failed redemptions due to insufficient USDC balance
Potential for massive unintended USDC transfers
Broken redemption mechanism
Users unable to redeem their ZENO tokens
Protocol's USDC reserves at risk if sufficient balance exists
Manual code review
Add decimal adjustment when 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.