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:
How it works:
- 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
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
