The MATURITY_DATE
in the ZENO
contract is configured independently of the Auction
contract's endTime
. If MATURITY_DATE
is set before the Auction.endTime
, users can redeem their ZENO tokens immediately after purchase, bypassing the intended bond logic. This violates the assumption that redemption should only occur after the auction has concluded and the maturity date has been reached.
The MATURITY_DATE
in the ZENO
contract is set during deployment and is not synchronized with the Auction
contract's endTime
.
If MATURITY_DATE < Auction.endTime
, users can call the redeem
or redeemAll
functions immediately after purchasing ZENO tokens, even though the auction is still active.
The bond logic assumes that users cannot redeem their ZENO tokens until the maturity date has passed.
However, if MATURITY_DATE
is misconfigured, this assumption is violated, allowing early redemptions.
Suppose:
Auction.endTime = 200
ZENO.MATURITY_DATE = 150
A user purchases ZENO tokens at block.timestamp = 120
and attempts to redeem them at block.timestamp = 160
. Since 160 > MATURITY_DATE (150)
, the redemption succeeds, even though the auction is still ongoing (160 < Auction.endTime
).
Users can redeem their ZENO tokens before the auction concludes, potentially disrupting the intended economic model of the bond system.
Early redemptions reduce the time available for the protocol to generate returns on the collected USDC, leading to potential revenue loss.
Manual Review
Ensure that MATURITY_DATE
is always set to a value greater than or equal to Auction.endTime
during deployment.
Use a deployment script to validate that MATURITY_DATE >= Auction.endTime
before deploying the contracts
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.