Quickstart
This walkthrough goes from zero to reading a finalized market-resolution assertion on Polygon. It assumes familiarity with Solidity and ethers or viem. The full consumer example is in Examples.
The shortest path has four steps. First, compute the canonical event ID for the game your market references. Second, locate the relevant UMA MARKET_RESOLUTIONS assertion for that event and signal bucket from the assertion log or your indexer. Third, check UMA OOV3 for the assertion result and decode the JSON claim payload from the AssertionMade log. Fourth, read the player stat you care about from the decoded payload and grade your market.
Step 1 — Compute the canonical event ID
The canonical event ID is a keccak256 hash of four immutable properties of the sporting event. Both the Props Oracle and any standard-market oracle derive the same ID from the same inputs, so it functions as the correlation key across independent assertion streams.
bytes32 eventId = keccak256(abi.encodePacked(
leagueCode, // e.g. "mlb"
homeTeam, // canonical team string, see Coverage → Leagues
awayTeam,
commenceTime // uint256 unix timestamp of scheduled first pitch
));Team strings are case-sensitive and must match the canonical values published in the per-league reference. Getting the string wrong produces a different hash and no registry hit.
Step 2 — Locate and check the UMA assertion
MARKET_RESOLUTIONS assertions are bucketed by volatility signal and do not write to the EventRegistry. Index UMA AssertionMade events from the Props Oracle adapter, decode the claim, and select the assertion whose assertion_type, canonical_event_id, and signal bucket match the market you are resolving.
After you have the assertion ID, read UMA OOV3 to confirm the assertion has resolved truthfully. If it has not resolved, is still in its liveness window, or was disputed and lost, consumer markets should remain unresolved and re-check later.
Step 3 — Decode the assertion payload
The full market-resolution payload is emitted by UMA as the claim parameter of the AssertionMade event. It is a UTF-8-encoded JSON string. Fetch the log matching the assertion ID, decode the bytes, and parse the JSON. The full schema is documented in Assertion schema.
Step 4 — Read the stat and grade
Locate the entry whose oracle_player_id matches the player your market references and whose stat_type matches the market type. The stat_value is a raw numeric value. Compare it against the locked line you stored when your market opened, and apply your own push, void, and DNP rules.
That is the entire integration. There is no authentication, no rate limit, and no fee. If you expect to read many events in a single transaction, batch the registry reads and cache the decoded payload — UMA logs are immutable once emitted, so client-side caching is safe.