Overview
The Resolution Engine is the most critical component of the Mouth protocol. It determines bet outcomes and ensures fair, transparent resolution.Resolution Types
Type 1: Automatic (Oracle-Based)
For bets with quantifiable, verifiable conditions: Supported conditions:| Condition | Data Source | Example |
|---|---|---|
| Token price above/below X | Chainlink, Pyth | ”ETH > $5,000” |
| FDV above/below X | CoinGecko API + oracle | ”Monad FDV < $1B” |
| TVL above/below X | DeFi Llama API | ”Aave TVL > $20B” |
| On-chain event occurred | RPC query | ”Uniswap v4 deployed” |
- At bet creation, the resolution criteria are stored as structured metadata:
- At expiration, the engine fetches the data from the specified source
- Evaluates the condition against the data
- Submits the resolution on-chain
Type 2: Manual (Mouth Team)
For bets with subjective or off-chain conditions: Process:- Bet expires and is flagged in the Mouth admin dashboard
- A Mouth team member reviews the bet terms and checks the outcome
- Resolution is submitted via the admin dashboard
- If disputeable: 48-hour dispute window starts. If disputed, the team re-reviews with additional evidence and can call
reResolve()to update the outcome. - If non-disputeable: bet is immediately finalized. For PvP 1v1, the backend calls
resolverClaim()to distribute funds.
Dispute Mechanism
The dispute mechanism only applies to disputeable bets. Non-disputeable bets are immediately finalized after resolution.Window
Every disputeable resolution (automatic or manual) has a 48-hour dispute window before finalization.Filing a Dispute
- Either party clicks “Dispute” on the bet page within 48 hours
- Must provide:
- Reason: Why they believe the resolution is incorrect
- Evidence: Links, screenshots, data sources supporting their claim
- A dispute bond may be required in the future to prevent spam (not in v1)
Dispute Review Process
Dispute Outcomes
| Outcome | Result |
|---|---|
| Dispute rejected | Original resolution stands, bet is finalized |
| Dispute upheld | Resolution is overturned, new outcome is set |
| Inconclusive | Bet is resolved as a Draw, both parties refunded |
Resolution on Smart Contract
The Resolution Engine interacts with the Bet smart contract via a dedicated resolver wallet:- Only the authorized resolver address can call
resolve() - Resolution can only happen after the expiration timestamp
- The outcome must be one of:
ChallengerWins,OpponentWins,Draw - If disputeable: status →
Resolved, 48-hour dispute window timer starts on-chain - If non-disputeable: status →
Finalizedimmediately, claimable balance is snapshotted
resolverClaim() to batch-distribute all funds to winners (especially useful for PvP 1v1 bets). For Open PvP bets with many opponents, individual claim() calls are safer to avoid out-of-gas issues.
The resolver can also:
- Call
reResolve()during the dispute window to update the outcome (disputeable only) - Call
withdraw()after the acceptance deadline to clean up deserted bets (Pending status only)
Future: Decentralized Resolution
In future versions, Mouth may integrate decentralized arbitration for disputes:- UMA Optimistic Oracle: Propose outcomes with a dispute bond, escalate to UMA token holders if disputed
- Kleros: Decentralized court system for subjective disputes
- Reality.eth: Crowd-sourced oracle with economic incentives for truthful reporting