Skip to content
Request an audit

Lack of Emergency Market Invalidation Mechanism

TitleLack of Emergency Market Invalidation Mechanism
Reward$720, 5 dups
ContestIndex Fun Order Book - 14 Oct 2025 on Sherlock
Author0xeix
ContextWrong Business Logic

The Protocol Owner or Emergency Resolver cannot unilaterally invalidate an active market, which permanently locks collateral for every market participant if the outcome is impossible to determine (a source API failure, an ambiguous question, or a cancelled real-world event).

A real-world event associated with a questionId is cancelled, permanently delayed, or deemed unresolvable.

The Oracle cannot provide a valid merkleRoot because no outcome has occurred.

Market Participants call MarketController.claimWinnings() in MarketController.sol:349.

The transaction reverts due to require(marketResolver.getResolutionStatus(conditionId), "Market not resolved"); in MarketController.sol:357.

Alpha: the issue looks complex but is actually simple. The Merkle root is just how this oracle submits information on chain, which can then be verified with a proof. The issue itself is that if the off-chain mechanism fails, there is no way for users to get their on-chain collateral back.

Context: Merkle roots are not needed to understand this issue, but if that bothers you, read this Cyfrin resource.

Conclusion

$720 for this finding is fair in my opinion — no free money. You do not even need to be a developer to come up with it: it sits on the business-logic side of not handling an off-chain failure.

Full Report

Message on Telegram All 62 posts