Every stake accepted from a supported standard ERC20 should remain claimable after a valid terminal outcome.
The k=2 bonus calculation expands amount * (T - entryTime)^2 into absolute timestamp moments. The stored moments can be safe when a stake enters, while the later additions in _bonusShare() overflow after T advances. The mathematically equivalent centered score still fits, but Solidity reverts before reaching Math.mulDiv.
The global expression is evaluated for every claimant. Therefore, one sufficiently large stake can make even a small honest staker's claim revert. This raw-unit threshold is reachable with a standards-compliant high-decimal ERC20; at the repository's realistic base timestamp, the PoC uses less than 0.02 token at 60 decimals.
Likelihood:
This occurs when an allowlisted standard ERC20 has a very large raw-unit supply or high decimal precision and aggregate stake approaches the arithmetic bound.
Any positive bonus causes _bonusShare() to execute after SURVIVED or EXPIRED resolution.
Impact:
A large staker can make every staker's claim revert, including claims for small honest deposits.
Principal remains locked because withdrawals are disabled after the risk window opens and no principal-only claim path bypasses _bonusShare().
Place PoC.t.sol in test/ and run:
The complete file defines a standard 60-decimal ERC20 and reuses the repository's existing unit-test mocks. It does not require a BattleChain RPC.
Cap aggregate stake against the largest possible scoring timestamp, which is bounded by expiry, or replace the expanded absolute-time formula with wider centered arithmetic.
The contest is live. Earn rewards by submitting a finding.
This is your time to appeal against judgements on your submissions.
View preliminary resultsAppeals are being carefully reviewed by our judges.
The contest is complete and the rewards are being distributed.