The Auction
contract transfers USDC
payments from buyers directly to the businessAddress
, bypassing the ZENO
contract entirely. The ZENO
contract is responsible for redeeming tokens, but it does not hold any USDC
balance. As a result:
The ZENO
contract cannot fulfill redemption requests because it lacks the necessary funds.
This breaks the core functionality of the bond system, where users are supposed to be able to redeem their ZENO tokens for USDC after the maturity date.
Their is no explicit mechanism in place that allows businessAddress
to fund the ZENO
contract
The buy
function in the Auction
contract sends USDC
directly to businessAddress
instead of depositing it into the ZENO
contract.
The ZENO
contract has no mechanism to receive or manage USDC
, so even if the business manually deposits USDC
into the ZENO
contract, there is no guarantee that the deposited amount will match the total supply of ZENO
tokens.
To ensure the system works as intended, the following invariant should hold:
This invariant ensures that the ZENO
contract holds enough USDC
to cover all outstanding ZENO
tokens (adjusted for decimals).
Violation :
In the current implementation, the invariant fails because the ZENO
contract holds zero USDC
, while the businessAddress
holds all the collected USDC.
Users cannot redeem their ZENO tokens for USDC because the ZENO
contract lacks sufficient funds.
If businessAddress
doesn’t fund ZENO
, redemptions fails, leaving users unable to redeem despite burning ZENO
The business must manually fund the ZENO
contract with USDC, which introduces operational overhead and potential human error.
Redirect USDC to the ZENO Contract
Modify the buy
function in the Auction
contract to transfer USDC to the ZENO contract instead of businessAddress
. The ZENO contract can then use these funds for redemptions.
If the business prefers to keep control over the USDC, you can introduce a funding mechanism in the ZENO
contract. The business can deposit USDC into the ZENO
contract before redemptions begin.
Add a fund function to the ZENO contract:
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.