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:
- Assert — Anyone calls
assertMarketOutcomewith a bond deposit - Challenge window — During the liveness period, anyone can dispute via UMA
- Settle — After liveness expires unchallenged,
settleAssertionfinalizes the result - Report —
reportResolutionpushes 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
additionalRewardat 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 Case | Recommended Liveness |
|---|---|
| Sports with clear outcomes | 2 hours |
| Standard markets | 4–12 hours |
| High-value or complex markets | 24–48 hours |
Recommended Defaults
| Parameter | Recommended | Description |
|---|---|---|
umaMinBond | 1–100 USDC | Higher for high-value markets |
umaRewardAmount | 1–10 USDC | Higher rewards = faster resolution |
liveness | 7200 (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
- Resolution → — the full resolution lifecycle
- Creating Markets → — per-market
additionalRewardandliveness - Price Markets → — Pyth-powered markets that skip UMA