Liquidity Rewards
Any participant who posts resting limit orders on Openfish automatically enters the liquidity reward program. Scores are computed continuously and rewards are settled once per day at midnight UTC.
The program is designed to:
- Build deep liquidity across every active market.
- Favour tight, two-sided quotes clustered near the midpoint.
- Compensate steady participation throughout a market’s life.
- Deter wash trading and manipulative order patterns.
Minimum payout: $1. Amounts below this threshold are not distributed.
How Scoring Works
Section titled “How Scoring Works”Openfish snapshots the orderbook once per minute and evaluates every maker’s resting orders. Those per-minute scores accumulate over a 24-hour epoch (1440 snapshots total), then each maker’s share of the daily reward pool is proportional to their accumulated score.
Key Parameters
Section titled “Key Parameters”Two configuration values, published per market through the CLOB API, govern eligibility:
| Parameter | Description |
|---|---|
min_incentive_size | Minimum order size eligible for rewards |
max_incentive_spread | Maximum distance from midpoint eligible for rewards (in cents) |
Orders smaller than min_incentive_size or wider than max_incentive_spread receive a score of zero.
Scoring Formula
Section titled “Scoring Formula”1. Order Scoring Function
Section titled “1. Order Scoring Function”Each qualifying resting order is scored with a quadratic curve that gives disproportionate weight to tighter spreads:
S(v, s) = ((v - s) / v)^2Where:
v=max_incentive_spread(maximum qualifying spread in cents)s= distance of your order from the size-cutoff-adjusted midpoint (in cents)
An order right at the midpoint scores 1.0. An order at the maximum spread scores 0.0.
2. Side Scores
Section titled “2. Side Scores”At each snapshot, the system calculates two aggregate side scores:
Q_one = sum of S(v, spread_i) * size_i for all orders on the first sideQ_two = sum of S(v, spread_i) * size_i for all orders on the second sideA bid on the YES book and an ask on the NO book contribute to the same side, because they represent the same economic position.
3. Two-Sided Bonus
Section titled “3. Two-Sided Bonus”The program heavily favours participants who quote both sides. The combined score takes the minimum of the two sides, with a penalty divisor c (currently 3.0) applied when only one side is present:
When midpoint is between 0.10 and 0.90:
Q_min = max(min(Q_one, Q_two), max(Q_one / c, Q_two / c))Single-sided orders can still score, but at one-third the rate.
When midpoint is below 0.10 or above 0.90:
Q_min = min(Q_one, Q_two)Only two-sided liquidity scores in extreme-probability markets.
4. Normalisation and Distribution
Section titled “4. Normalisation and Distribution”- Per-sample normalisation: Your
Q_mindivided by the sum of all makers’Q_minin that sample. - Epoch aggregation: Sum your normalised scores across all 1440 samples.
- Final share: Your epoch total divided by all makers’ epoch totals, multiplied by the market’s daily reward pool.
Worked Example
Section titled “Worked Example”Assume a market with adjusted midpoint 0.50 and max_incentive_spread of 3 cents.
Your resting orders (first side):
| Order | Spread | Size |
|---|---|---|
| Bid on YES @ 0.49 | 1 cent | 100 |
| Bid on YES @ 0.48 | 2 cents | 200 |
| Ask on NO @ 0.51 | 1 cent | 100 |
Q_one = ((3-1)/3)^2 * 100 + ((3-2)/3)^2 * 200 + ((3-1)/3)^2 * 100 = 0.444 * 100 + 0.111 * 200 + 0.444 * 100 = 44.4 + 22.2 + 44.4 = 111.0Your resting orders (second side):
| Order | Spread | Size |
|---|---|---|
| Ask on YES @ 0.52 | 2 cents | 150 |
| Bid on NO @ 0.49 | 1 cent | 150 |
Q_two = ((3-2)/3)^2 * 150 + ((3-1)/3)^2 * 150 = 0.111 * 150 + 0.444 * 150 = 16.7 + 66.7 = 83.4Since the midpoint is 0.50 (between 0.10 and 0.90):
Q_min = max(min(111.0, 83.4), max(111.0/3, 83.4/3)) = max(83.4, 37.0) = 83.4Your score for this sample is 83.4, normalised against all other makers.
Reward API Endpoints
Section titled “Reward API Endpoints”| Endpoint | Auth | Description |
|---|---|---|
GET /rewards/markets/current | Public | Current reward pools per active market |
GET /rewards/markets/{condition_id} | Public | Top traders and reward estimates for a specific market |
GET /rewards/user | L2 | Per-market reward breakdown for the authenticated user |
GET /rewards/user/total | L2 | Aggregated lifetime earnings |
GET /rewards/user/percentages | L2 | Your share of total platform volume |
GET /rewards/raw | L2 | Raw per-trade reward data (up to 500 recent trades) |
Tips for Maximising Rewards
Section titled “Tips for Maximising Rewards”- Quote both sides — Two-sided liquidity scores up to 3x higher than single-sided.
- Stay tight — The quadratic scoring function heavily favours orders near the midpoint.
- Keep size up — Scores scale linearly with order size.
- Stay on the book — Scores are sampled every minute. Gaps reduce your epoch total.
- Watch extremes — In markets where the midpoint is below 0.10 or above 0.90, only two-sided liquidity earns rewards.
Next Steps
Section titled “Next Steps”- Maker Rebates — Volume-based USDC rebates paid daily.
- Trading — Order entry and quoting best practices.