Skip to main content

Overview

When a bet is created and directed at you (or is open), you can accept it by depositing funds. The acceptance flow differs depending on whether it’s a PvP bet (1v1) or an Open PvP Bet (partially fillable by multiple opponents).

PvP Bets (1v1)

Flow

Step by Step

  1. Opponent sees the bet — via the same URL the bot posted when the Challenger initiated the bet, or via the web app directly
  2. Views the bet details on mouth.bet:
    • Title, description, resolution criteria
    • Amount required to match
    • Expiration date
    • Challenger’s X profile
  3. Logs in with X (via Privy) if not already logged in — if the opponent was pre-registered by the backend, Privy assigns them the same wallet that was used in the bet contract
  4. Clicks “Accept Bet”
  5. Confirms the deposit — the backend deposits the required USDC from the opponent’s embedded wallet via a gasless server-side transaction. The required amount depends on the bet’s odds setting: at default odds (50/50), the deposit matches the Challenger’s exactly. If the Challenger set custom odds, the required deposit is adjusted proportionally.
  6. Bet becomes Active:
    • The 2% protocol fee is collected on the total pot (challenger + opponent deposits) and sent to the Mouth treasury
    • The remaining deposits are now locked in the smart contract
    • Neither party can withdraw
    • The Mouth bot posts on X confirming the bet is live

Access Control

  • Only the specified X account can accept the bet — the smart contract checks the opponent’s wallet address, which is resolved from the X handle by the backend via Privy
  • If the opponent hasn’t signed up yet, a wallet is pre-generated for them (see Identity & Wallets)
  • No one else can deposit or accept

Open PvP Bets (Partially Fillable)

Open PvP Bets have no specific opponent — anyone with a Mouth account can take the other side, and multiple opponents can each fill a portion of the total amount.

Flow

Step by Step

  1. Open PvP Bet is visible on mouth.bet explore page, or shared via X / direct link
  2. Any user can view the bet details, including:
    • Total amount
    • Amount already filled vs remaining
    • Acceptance deadline
    • Number of current opponents
  3. User chooses an amount to deposit (any amount up to the remaining unfilled portion)
  4. Deposits USDC into the bet contract
  5. Bet updates:
    • The deposited amount is recorded for that opponent
    • The “filled” progress is updated
    • The 2% protocol fee is collected proportionally on each deposit and sent to the Mouth treasury
    • If fully filled → the bet becomes Active immediately
    • If not fully filled → remains Filling until deadline

Acceptance Deadline

All PvP Bets have a mandatory acceptance deadline. This is critical to prevent abuse:
Without an acceptance deadline, someone could snipe the remaining unfilled amount right before the bet’s expiration date, giving themselves an unfair informational advantage (they already know the likely outcome).
What happens at the acceptance deadline:
ScenarioResult
Fully filled before deadlineBet is already Active, deadline is irrelevant
Partially filled at deadlineBet activates with the filled amount. Challenger’s unfilled portion is returned.
Not filled at all at deadlineBet expires. Challenger reclaims their full deposit. No fee charged.
Example — partially filled:
  • Challenger creates an Open PvP Bet for $1,000 with a 48h acceptance deadline
  • After 48h: opponents have deposited a total of $700
  • Bet activates for $700 each side (Challenger’s $300 unfilled is returned)
  • Total pot: $1,400

Proportional Payouts

When an Open PvP Bet resolves, payouts are proportional to each opponent’s deposit. The 2% protocol fee was already collected at deposit time, so claiming distributes the remaining contract balance. If Challenger wins:
  • Challenger receives all remaining funds in the contract
If Opponents win:
  • Each opponent receives their proportional share of the remaining contract balance, based on their deposit ratio: payout = (opponentDeposit / filledAmount) * claimableBalance
Example — $700 Challenger vs $700 Opponents (3 users), fee = 2% of $1,400 = $28, claimable = $1,372:
OpponentDepositedShare of PoolPayout if Win
User A$40057.1%$784.00
User B$20028.6%$392.00
User C$10014.3%$196.00
The 2% protocol fee is collected at deposit time (proportionally as each opponent deposits), not at claim time. Each winning opponent gets their proportional share of the entire remaining contract balance.

What Happens After Acceptance

PvP Bet

State ChangeBeforeAfter
Bet statusPendingActive
Challenger’s fundsWithdrawableLocked
Opponent’s fundsN/ALocked
CancellationAllowed (Challenger only)Not allowed (unless mutual)

Open PvP Bet

State ChangeBefore DeadlineAfter Deadline (Partially/Fully Filled)
Bet statusPendingActive
Challenger’s fundsWithdrawable (unfilled portion)Locked (filled portion)
Opponents’ fundsLocked once depositedLocked
New opponentsCan still depositCannot deposit

Declining a Bet

There is no explicit “decline” action. If the opponent doesn’t want to accept:
  • They simply don’t deposit
  • For PvP bets: the Challenger can withdraw their funds at any time
  • For Open PvP Bets: the acceptance deadline handles the cutoff automatically