OddMaki
Configuration

Oracle Settings

Configure UMA Optimistic Oracle parameters for your venue — assertion bonds, rewards, and liveness periods. Price markets use Pyth and do not require these.

OddMaki supports two oracle paths:

  • UMA Optimistic Oracle V3 — used for discretionary markets (binary markets and market groups). Anyone can assert an outcome, anyone can dispute it, and disputes escalate to UMA's DVM.
  • Pyth Network — used for price markets (Up/Down on a price feed). Resolution is deterministic from the historical Pyth price at close time.

This page covers UMA oracle settings. Price markets do not use UMA bonds or liveness — they resolve automatically from oracle data. The venue-level parameters below apply only to UMA-resolved markets.

UMA Resolution Lifecycle

Resolution follows a four-step lifecycle:

  1. Assert — Anyone calls assertMarketOutcome with a bond deposit
  2. Challenge window — During the liveness period, anyone can dispute via UMA
  3. Settle — After liveness expires unchallenged, settleAssertion finalizes the result
  4. ReportreportResolution pushes the outcome to the CTF for payouts

If an assertion is disputed and rejected, the market can be re-asserted.

Bond Amount

The bond is collateral an asserter must deposit when making an outcome assertion. It deters false assertions — if disputed and wrong, the asserter loses their bond.

  • Set per venue via umaMinBond (applies to all UMA-resolved markets in the venue)
  • Not overridable per market
  • Denominated in the collateral token (USDC, 6 decimals)
  • The effective bond is max(venue.umaMinBond, UMA.minimumBond(collateralToken)) — UMA V3 enforces its own per-currency minimum

Query the effective bond for a market:

const bond = await client.uma.getEffectiveBond(marketId);

Dispute economics: If unchallenged → bond returned + reward paid. If disputed → UMA's DVM arbitrates, loser forfeits bond to winner.

Reward Amount

The reward incentivizes timely resolution. Paid to a correct asserter after successful settlement.

  • Venue default set via umaRewardAmount
  • Per-market addition via additionalReward at market creation: effective reward = umaRewardAmount + additionalReward
  • Can be 0 — the market still functions, but asserters have no reward incentive
  • Funded by the market creator at market creation time

Liveness Period

The challenge window during which anyone can dispute an assertion. Set per market at creation time via the liveness parameter.

  • Minimum: 2 hours (7200 seconds) — values below are silently floored
  • Not stored on the venue; specified individually per market
  • For market groups, all constituent markets share the same liveness
Use CaseRecommended Liveness
Sports with clear outcomes2 hours
Standard markets4–12 hours
High-value or complex markets24–48 hours
ParameterRecommendedDescription
umaMinBond1–100 USDCHigher for high-value markets
umaRewardAmount1–10 USDCHigher rewards = faster resolution
liveness7200 (2h)Increase for markets needing verification

Updating Oracle Settings

Update bond and reward after venue creation. Operator-only, via the SDK:

import { parseUnits } from 'viem';

const hash = await client.venue.updateOracleParams({
  venueId: 1n,
  umaRewardAmount: parseUnits('3', 6),  // 3 USDC
  umaMinBond: parseUnits('2', 6),       // 2 USDC
});

Liveness is set per market at creation and cannot be changed after.

What's Next