Normal behavior: withdraw_shares() lets investors redeem their shares for ETH based on the calculated share_price, subject to caps and penalties.
Specific issue: If one investor withdraws most of the company’s funds (or the company spends balance elsewhere), then company_balance can fall below the payout required for the next investor. The next withdrawal attempt will hit:@> assert self.company_balance >= payout, "Insufficient company funds!!!"
causing a revert, locking all remaining investors from withdrawing any ETH, even though they still hold shares. There’s no queuing or proportional payout fallback — the function simply fails.
Likelihood:
1.Happens whenever total redemption requests exceed available balance — likely after large withdrawals or production expenses.
2.Medium likelihood in real operation because balance fluctuations are common in on-chain companies or DeFi-style contracts.
Impact:
1.High — a single depleted balance locks every investor’s funds until the owner manually re-funds.
2.Reputation and trust impact — investors’ capital becomes illiquid.
3.Creates a denial-of-service for legitimate withdrawals and may break tokenomics or fairness assumptions.
Explanation:
After producing items or paying debt, company_balance drops.
When an investor calls withdraw_shares(), the assert fails, reverting the whole transaction and preventing any withdrawal.
Explanation (brief):
Instead of reverting when funds are insufficient, implement partial withdrawals or a queued payout system.
Investors should be able to withdraw up to the available balance, with the remainder owed later.
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.