Zeno redeedm consider that 1 wei bond is equivalent with 1wei of USDC token.
There are 2 problmes with it:
users doesn't redeem the cupon at it's face value (know also as nominal value);
the redeem amount is not scaled by Zeno decimals.
Redeemers will receive an incorrect USDC amount back.
First let's clarify how a zero cupon bond works. According to investopedia:
The par value (or face value, or nominal value) is, according to Investopedia:
So a cupon bond is issued at $95 and it can be redeemed at maturity for 100.
In ZENO::redeem the users receive the same amount of USDC as the amount of Zeno tokens redeemed.
There are 2 issues with this implementation:
the Zeno token is a standard token with 18 decimals, while the USDC token has 6 decimals (if the usdc is used).
the amount of Zeno tokens redeem are not multiplied by the bond's face value
By example for one bond (1e18) with face value of $100, the redeemer receives 1e12 * 1e6 USDC instead of 1e2 * 1e6 USDC amount.
Bonds are redeemed at the wrong price.
Redeemers receive more value than they should.
Add a new faceValue (or redeemValue) variable in AuctionState struct, or even in the Zeno contract.
Update redeem :
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.