World Cup Liquidity Rewards
How Outcome rewards two-sided liquidity and trading across the World Cup champion market and every World Cup match market.
This technical reference explains how rewards are scored and paid so makers and takers can reason about the program and update their strategies with confidence.
The program runs from the opening match on June 11 through the final on July 19. It has two independent reward programs:
- The champion market, covering the single "2026 World Cup champion?" market for the full tournament.
- The match markets, covering every World Cup match, with rewards published per match each day.
Both programs share the same core philosophy and building blocks. They differ in budget allocation and a small number of scoring parameters. Rewards are paid in USDC on Hyperliquid. All trading takes place on Outcome.xyz, and reward computation infrastructure is operated by Monarch.
Core Philosophy
The program pays for liquidity that is genuinely useful to traders: deep, two-sided depth posted close to fair value, with more reward weight directed to the markets and moments that need liquidity most. It stays simple enough that makers can reason about it and continuously adjust.
Three ideas apply across the program:
- Near fair value: Only orders inside a scored band around the current mid earn, and orders closer to the mid earn more.
- Two-sided: Useful depth on bids and asks is scored, and two-sided quotes receive a multiplier.
- Useful: Quotes that actually get filled earn an additional reward, and a smaller share is set aside for takers who use that liquidity.
Shared Concepts
Settlement and Price Convention
A YES contract settles at 1.00 if the outcome occurs and 0.00 if it does not. Order prices range from 0 to 1, a price in this range is equivalent to the implied probability, where one cent equals one percentage point of probability. e.g. 56 cents = 56% implied probability.
Hyperliquid Mid
hyperliquid_mid is the mid price of the market's order book on Hyperliquid. It is used for quote distance scoring, quote depth scoring, and probability-weighted Champion reward scoring. Current fill scoring uses exact processed fill notional from execution fill price and size.
Reward Split
Within each reward budget, the same split applies:
| Component | Share | What it pays for |
|---|---|---|
| Quote rewards | 40% | Sustained displayed depth near fair value. |
| Maker fill rewards | 30% | Maker-side fills, proving useful liquidity. |
| Taker fill rewards | 30% | Taker-side fills, to bootstrap real usage. |
Maker fill rewards pay the execution of resting orders. Combined with quote rewards, the large majority of every budget flows to liquidity providers, with a smaller taker incentive on top.
Builder Code Eligibility
Only orders and trades placed on Outcome.xyz are eligible for rewards. Eligible activity must use the Outcomexyz builder code with the addresses attached to all orders:
0xab5dbc057628bc18523c4cdfc0e1e2ebdbecb704There is currently no additional fee for using the builder code. This keeps attribution simple and makes reward accounting auditable without adding extra trading cost.
Scoring Data
Quote scoring is calculated by recording the live orderbook during the incentivized period. This score is summed up individually for each maker over every block where the scoring criteria relative to that block's mid price is applied.
Quote Depth Scoring
Quote rewards are based on scored bid depth and scored ask depth. One-sided liquidity can score, but balanced two-sided liquidity earns more.
A market block only scores if the maker has at least 50 USD of raw displayed bid-plus-ask order notional inside the scored band, before distance, time, live, two-sided, or probability multipliers:
raw_bid_notional_usd + raw_ask_notional_usd >= 50 USDEach reward program defines how side scores, live multipliers, and the two-sided multiplier are applied. The two-sided multiplier is evaluated independently for every market a maker quotes. Balanced liquidity in one market does not improve the score in another.
Reward Program 1: Champion Market
Market Structure
"2026 World Cup champion?" is a multi-outcome market. The program scores each team's selected YES winner book once. The scored book is the outcome YES-frame book: Monarch reconstructs the selected YES child plus its sibling NO placement stream, mirrors sibling prices as 1 - price, flips bid/ask, and scores the merged liquidity once under the selected YES child. NO book scoring is not a separate reward surface, but NO-placed liquidity and fills on the selected sibling can contribute once after normalization.
Reward Budget
daily_pool = 600 USD
reward_period = 1 day
quote_reward_pool = 40%
maker_fill_pool = 30%
taker_fill_pool = 30%
payout_method = pro-rata by probability-weighted scoreThere is one shared daily pool for the full champion campaign and no fixed budget per team.
Team Eligibility
Eligibility is set once per reward day using a blended mid. The blended mid is only used for daily eligibility, not intraday scoring. The eligible team list is published before the start of each reward day, targeted for 09:00 UTC, on the Outcome frontend and via Monarch's API.
eligibility_mid = internal blended mid
team is day-eligible if eligibility_mid > 5.00% and eligibility_mid <= 99.00%The day-start list avoids constant eligibility churn during the day. If a team is eliminated, scoring for that team stops immediately.
Scoreable Blocks
During the day, quote depth scores only in blocks where the Hyperliquid mid stays inside the scoring thresholds:
block is scoreable if current_hyperliquid_mid >= 1.00% and current_hyperliquid_mid <= 99.00%Once a team is day-eligible, quote blocks score only while the current Hyperliquid mid is between 1.00% and 99.00%, inclusive. If the current mid moves below 1.00%, quote blocks score zero, and scoring resumes if the mid moves back to 1.00% or above. The same applies symmetrically above 99.00%. Fill scoring uses exact fill notional for eligible, non-eliminated teams when the @Outcomexyz builder code is used. Eliminated teams stop scoring immediately.
Distance Multiplier
The champion program uses a fixed 2.00 cent depth cutoff on both bid and ask sides with the shared spread curve. Orders only score inside the 1.00% to 99.00% rewardable price range.
distance_cents = abs(order_price - hyperliquid_mid) * 100
max_distance = 0.02
max_distance_cents = 2.00
lower_scored_bound = max(0.01, hyperliquid_mid - max_distance)
upper_scored_bound = min(0.99, hyperliquid_mid + max_distance)
if lower_scored_bound <= order_price <= upper_scored_bound:
distance_multiplier = (2 - distance_cents) ^ 2
else:
distance_multiplier = 0An order at the mid earns a multiplier of 4x, falling to 0 at exactly 2.00 cents away. Orders outside the scored band receive zero score. The fixed curve keeps the same multiplier across all champion teams.
Worked cutoffs:
| Hyperliquid mid | Max distance | Scored band |
|---|---|---|
| 16.00% | 2.00 cents | 14.00% to 18.00% |
| 2.00% | 2.00 cents | 1.00% to 4.00% |
| 98.50% | 2.00 cents | 96.50% to 99.00% |
Quote Depth Score
For each maker, team, and block:
raw_bid_notional_usd = sum(bid_order_notional_usd inside the scored band)
raw_ask_notional_usd = sum(ask_order_notional_usd inside the scored band)
raw_in_band_notional_usd = raw_bid_notional_usd + raw_ask_notional_usd
bid_side_score = sum(bid_order_notional_usd * distance_multiplier)
ask_side_score = sum(ask_order_notional_usd * distance_multiplier)
depth_score = bid_side_score + ask_side_score
if max(bid_side_score, ask_side_score) > 0:
balance_ratio = min(bid_side_score, ask_side_score) / max(bid_side_score, ask_side_score)
else:
balance_ratio = 0
two_sided_multiplier = 1 + 2 * balance_ratio
if raw_in_band_notional_usd >= 50:
team_block_score = depth_score * two_sided_multiplier
else:
team_block_score = 0The multiplier ranges from 1.00x for one-sided liquidity to 3.00x for fully balanced two-sided liquidity.
Probability-Weighted Scoring
At the end of the daily reward period, each eligible team's average daily Hyperliquid mid is converted into a normalized probability weight:
daily_mean_hyperliquid_mid = average hyperliquid_mid across valid blocks for the team
probability_weight = daily_mean_hyperliquid_mid
normalization_total = sum(probability_weight across eligible teams)
team_score_weightage = probability_weight / normalization_total
final_team_block_score = team_block_score * team_score_weightageReward weight follows the market's own probability distribution, so attention flows to eligible teams with more trading interest. Probability weights can sum to more than 100% before normalization, but team_score_weightage is the actual normalized weight and always sums to 1.00 across eligible teams.
We publish the eligible team list each day. Example weightings may be published alongside it for reference; those figures are illustrative and are not a guaranteed per-team budget.
Champion Rewards
Quote reward, per maker:
maker_quote_score = sum(final_team_block_score across eligible teams and blocks)
maker_quote_reward =
quote_reward_pool * daily_pool * maker_quote_score / total_maker_quote_scoreMaker fill reward, per maker-side fill on an eligible, non-eliminated team when the builder code is used:
maker_fill_score = maker_fill_notional_usd * team_score_weightage
maker_fill_reward =
maker_fill_pool * daily_pool * maker_fill_score / total_maker_fill_scoreTaker fill reward, per taker-side fill under the same conditions:
taker_fill_score = taker_fill_notional_usd * team_score_weightage
taker_fill_reward =
taker_fill_pool * daily_pool * taker_fill_score / total_taker_fill_scoreFinal payout, per wallet:
total_reward = maker_quote_reward + maker_fill_reward + taker_fill_rewardReward Program 2: Match Markets
Market Structure
Daily match campaigns apply to all World Cup match markets for that reward day. For each match, the program scores the mutually exclusive YES outcome books:
Group-stage matches score three YES books:
Team 1 wins YES
Team 2 wins YES
Draw YESKnockout matches score one selected YES-frame book. The sibling NO placement stream is normalized into that book before scoring, but NO books are not scored as separate reward surfaces:
Team 1 wins/progresses YES (equivalent to Team 2 loses/knocked out)Reward Budget
For each match, Monarch publishes the match list, reward amount, scheduled kickoff time, and incentive window at the 09:00 UTC update before the incentive window begins.
reward_period = match incentive window
quote_reward_pool = 40%
maker_fill_pool = 30%
taker_fill_pool = 30%
payout_method = pro-rata by scoreMatch reward amounts are set by tournament stage:
| Stage | Reward amount |
|---|---|
| Mexico vs South Africa on June 11 through Korea vs Czechia on June 12 | 100 USD per match |
| Canada vs Bosnia on June 12 through Australia vs Turkey on June 14 | 200 USD per match |
| Germany vs Curacao on June 14 onward | 320 USD per match |
| Round of 32 | 330 USD per match |
| Round of 16 | 600 USD per match |
| Quarter finals | 1,200 USD per match |
| Semi finals | 1,400 USD per match |
| Third place | 1,000 USD for the match |
| Final | 2,400 USD for the match |
The match reward is split across the configured scored YES books. Group-stage matches usually score all named YES outcomes. Standalone binary knockout matches score the side-0 YES book once; the sibling NO book is mirrored into that YES-frame book as source liquidity and fills, not paid as a second book.
match_outcome_count = number of configured scored YES books
outcome_reward_amount = match_reward_amount / match_outcome_count
outcome_quote_pool = 40% * outcome_reward_amount
outcome_maker_fill_pool = 30% * outcome_reward_amount
outcome_taker_fill_pool = 30% * outcome_reward_amountIncentive Window
incentive_start_time = scheduled_kickoff_time - 12 hours
incentive_end_time = final whistle, or when penalties are resolved if the match goes to penaltiesOrders and trades only score inside the match incentive window. This gives makers time to build pre-match liquidity while keeping rewards focused on markets close enough to kickoff to matter.
The stored match configuration includes the tournament stage for reward setup, but the public daily-matches API does not expose stage. The public 09:00 UTC match response includes the match id, reward amount, scheduled kickoff time, recorded kickoff/end times when known, incentive start time, incentive end rule, status, live multiplier, and scored outcomes. For daily/all match envelopes, epoch_date is the 09:00 UTC start date and epoch_end is the following end/reward date. Latest-epoch daily-matches returns matches whose scheduled kickoff is not before that epoch start and whose incentive has already started; stored configured matches in the returned kickoff window also remain visible after their recorded campaign window has ended. Historical reads keep selecting by incentive start inside the epoch or scheduled kickoff inside the epoch. all-matches returns the full known schedule without accepting an epoch_date query.
Scoreable Blocks
Quote blocks score only where the market can support useful trading and the Hyperliquid mid is inside the scoring thresholds:
block is inside the match incentive window
market is active
market is not resolved
hyperliquid_mid is available
current_hyperliquid_mid >= 1.00%
current_hyperliquid_mid <= 99.00%Blocks before the start time or after the end time score zero. If the mid leaves the 1.00% to 99.00% band, quote blocks score zero and resume when it returns. Fill scoring uses exact fill notional inside the match incentive window when the @Outcomexyz builder code is used. If a market is paused, halted, cancelled, stale, resolved, or impossible to trade normally, scoring stops immediately.
Live Match Multiplier
Liquidity and fills in a five-minute scoring bucket that overlaps the live match receive a 5x multiplier, directing rewards toward the period when match markets need liquidity most:
bucket_end = bucket_start + 5 minutes
if bucket_start < live_end and bucket_end > live_start:
live_multiplier = 5
else:
live_multiplier = 1The live window runs from the kickoff whistle to the final whistle, or until penalties are resolved. Base quote and fill activity is scored at 1x, then the stored five-minute score row is materialized with the multiplier implied by the live window: a boundary bucket that overlaps live play receives 5x for the whole bucket, while buckets with no live overlap receive 1x. It does not override paused, halted, cancelled, resolved, stale, or otherwise untradeable market gates.
Distance Multiplier
Match markets move quickly, so the program uses a fixed 2.00 cent depth cutoff on both bid and ask sides with a spread curve that still pays more for liquidity closer to fair value:
distance_cents = abs(order_price - hyperliquid_mid) * 100
max_distance_cents = 2.00
if distance_cents <= max_distance_cents:
distance_multiplier = (2 - distance_cents) ^ 2
else:
distance_multiplier = 0An order at the mid earns a multiplier of 4x, falling to 0 at exactly 2.00 cents away. Orders more than 2.00 cents from the mid score zero.
Quote Depth Score
For each maker, match, outcome, and block:
raw_bid_notional_usd = sum(bid_order_notional_usd inside the scored band)
raw_ask_notional_usd = sum(ask_order_notional_usd inside the scored band)
raw_in_band_notional_usd = raw_bid_notional_usd + raw_ask_notional_usd
base_bid_side_score = sum(bid_order_notional_usd * distance_multiplier)
base_ask_side_score = sum(ask_order_notional_usd * distance_multiplier)
bid_side_score = base_bid_side_score
ask_side_score = base_ask_side_score
depth_score = bid_side_score + ask_side_score
if max(bid_side_score, ask_side_score) > 0:
balance_ratio = min(bid_side_score, ask_side_score) / max(bid_side_score, ask_side_score)
else:
balance_ratio = 0
two_sided_multiplier = 1 + 2 * balance_ratio
if raw_in_band_notional_usd >= 50:
base_match_block_score = depth_score * two_sided_multiplier
else:
base_match_block_score = 0
match_block_score = base_match_block_score * live_multiplierMatch Rewards
Quote reward, per maker, summed over scored outcomes:
maker_outcome_quote_score = sum(match_block_score across eligible blocks)
maker_outcome_quote_reward =
outcome_quote_pool * maker_outcome_quote_score / total_maker_outcome_quote_score
maker_quote_reward = sum(maker_outcome_quote_reward across matches and scored outcomes)Maker fill reward, per maker-side fill on a scored outcome inside the match incentive window when the builder code is used:
maker_outcome_fill_score = maker_fill_notional_usd * live_multiplier
maker_outcome_fill_reward =
outcome_maker_fill_pool * maker_outcome_fill_score / total_maker_outcome_fill_score
maker_fill_reward = sum(maker_outcome_fill_reward across matches and scored outcomes)Taker fill reward, per taker-side fill under the same conditions:
taker_outcome_fill_score = taker_fill_notional_usd * live_multiplier
taker_outcome_fill_reward =
outcome_taker_fill_pool * taker_outcome_fill_score / total_taker_outcome_fill_score
taker_fill_reward = sum(taker_outcome_fill_reward across matches and scored outcomes)Final payout, per wallet:
total_reward = maker_quote_reward + maker_fill_reward + taker_fill_rewardExclusions
Across both programs, the following do not score:
- Markets that are paused, halted, cancelled, stale, or resolved.
- Blocks outside the eligible period: the reward day for the champion market, or the incentive window for matches.
- Quote blocks without a reliable Hyperliquid mid.
- Champion quote blocks where the Hyperliquid mid is below 1.00%, or above 99.00%.
- Match quote blocks where the Hyperliquid mid is below 1.00% or above 99.00%.
- Quote orders outside the scored band: 2.00 cents for both the champion market and match markets.
- Teams that were not eligible at reward-day start, and eliminated teams in the champion market.
- NO books as separate reward surfaces; NO-placed liquidity and fills only score once when they belong to the selected sibling and are normalized into the selected YES-frame book.
- Orders or trades that do not use the
@Outcomexyzbuilder code. - Self-trades, related-wallet churn, wash trading, and circular volume.
These exclusions remove the most obvious ways to be paid for liquidity that is stale, duplicated, fake, unattributable, or not useful.
Payout and Settlement
Rewards are paid in USDC on Hyperliquid, pro-rata within each reward pool, based on each wallet's share of scored activity. There are no fixed per-wallet caps. Champion rewards are calculated each day; match rewards are calculated per incentive window.
Quick Reference
| Item | Champion market | Match markets |
|---|---|---|
| Scope | One market, full tournament, eligible teams published daily | Every match, published daily |
| Reward period | 1 day | Match incentive window |
| Budget | 600 USD per day | Per-match amount set by stage table |
| Split | 40 / 30 / 30 | 40 / 30 / 30 |
| Scored books | Each team's YES book | Mutually exclusive match outcome books |
| Distance cutoff | Fixed 2.00 cents | Fixed 2.00 cents |
| At-mid multiplier | 4.00x | 4.00x |
| Live multiplier | None | 5x during live play |
| Weighting | Probability-weighted over eligible teams, normalized | Equal split across all match outcomes |
| Scoring thresholds | 1.00% to 99.00% | 1.00% to 99.00% |
| Minimum depth | 50 USD raw in-band bid+ask notional | 50 USD raw in-band bid+ask notional |
| Two-sided multiplier | 1.00x to 3.00x | 1.00x to 3.00x |
