The Auction and ZENO contracts fail to account for the decimal difference between USDC (6 decimals) and ZENO (18 decimals) tokens, leading to severely incorrect pricing calculations and redemption amounts.
The contracts assume USDC and ZENO tokens have the same decimal precision, but:
USDC uses 6 decimals
ZENO inherits ERC20's default 18 decimals
This mismatch appears in two critical places:
Auction's buy function:
The price calculation cost = price * amount multiplies:
price (USDC - 6 decimals)
amount (ZENO - 18 decimals)
Without adjustment, this makes ZENO tokens 10^12 times more expensive than intended.
ZENO's redeem function:
The redemption transfers the same raw amount:
This means users receive 10^12 times less USDC than they should.
Users must pay 10^12 times more USDC than intended to purchase ZENO
Users receive 10^12 times less USDC when redeeming ZENO
Most transactions will revert due to insufficient balances
If transactions succeed, users lose significant value
Example with 1 ZENO token purchase:
Instead of paying 2 USDC, users must pay 2 quintillion USDC.
Manual review
Add decimal normalization:
In Auction.sol:
In ZENO.sol:
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.