Skip to main content
By posting resting limit orders, liquidity providers (makers) are automatically eligible for Polymarket’s incentive program. Rewards are distributed directly to maker addresses daily at midnight UTC. The program is designed to:
  • Catalyze liquidity across all markets
  • Encourage liquidity throughout a market’s entire lifecycle
  • Motivate passive, balanced quoting tight to a market’s midpoint
  • Encourage trading activity
  • Discourage blatantly exploitative behaviors
This program is heavily inspired by dYdX’s liquidity provider rewards. The methodology is essentially a copy of dYdX’s approach with adjustments for binary contract markets — distinct books, no staking mechanic, a modified order utility-relative depth function, and reward amounts isolated per market.

Methodology

Liquidity providers are rewarded based on a formula that rewards participation in markets, boosts two-sided depth (single-sided orders still score), and tighter spread vs the size-cutoff-adjusted midpoint. Each market configures a max spread and min size cutoff within which orders are considered. The average of rewards earned is determined by the relative share of each participant’s Qn in market m.

Variables

VariableDescription
SOrder position scoring function
vMax spread from midpoint (in cents)
sSpread from size-cutoff-adjusted midpoint
bIn-game multiplier
mMarket
m’Market complement (i.e. NO if m = YES)
nTrader index
uSample index
cScaling factor (currently 3.0 on all markets)
QnePoint total for book one for a sample
QnoPoint total for book two for a sample
Spread%Distance from midpoint (bps or relative) for order n in market m
BidSizeShare-denominated quantity of bid
AskSizeShare-denominated quantity of ask

Equations

1. Order Scoring Function

Quadratic scoring rule for an order based on position between the adjusted midpoint and the minimum qualifying spread: S(v,s)=(vsv)2bS(v,s)= (\frac{v-s}{v})^2 \cdot b

2. First Market Side Score

Qone=S(v,Spreadm1)BidSizem1+S(v,Spreadm2)BidSizem2+Q_{one}= S(v,Spread_{m_1}) \cdot BidSize_{m_1} + S(v,Spread_{m_2}) \cdot BidSize_{m_2} + \dots +S(v,Spreadm1)AskSizem1+S(v,Spreadm2)AskSizem2 + S(v, Spread_{m^\prime_1}) \cdot AskSize_{m^\prime_1} + S(v, Spread_{m^\prime_2}) \cdot AskSize_{m^\prime_2}

3. Second Market Side Score

Qtwo=S(v,Spreadm1)AskSizem1+S(v,Spreadm2)AskSizem2+Q_{two}= S(v,Spread_{m_1}) \cdot AskSize_{m_1} + S(v,Spread_{m_2}) \cdot AskSize_{m_2} + \dots +S(v,Spreadm1)BidSizem1+S(v,Spreadm2)BidSizem2 + S(v, Spread_{m^\prime_1}) \cdot BidSize_{m^\prime_1} + S(v, Spread_{m^\prime_2}) \cdot BidSize_{m^\prime_2}

4. Minimum Score

Boosts two-sided liquidity by taking the minimum of Qne and Qno, while still rewarding single-sided liquidity at a reduced rate (divided by c). If midpoint is in range [0.10, 0.90] — single-sided liquidity can score: Qmin=max(min(Qone,Qtwo),max(Qone/c,Qtwo/c))Q_{\min} = \max(\min({Q_{one}, Q_{two}}), \max(Q_{one}/c, Q_{two}/c)) If midpoint is in range [0, 0.10) or (0.90, 1.0] — liquidity must be double-sided to score: Qmin=min(Qone,Qtwo)Q_{\min} = \min({Q_{one}, Q_{two}})

5. Normalized Score

Qmin of a market maker divided by the sum of all Qmin across market makers in a given sample: Qnormal=Qminn=1N(Qmin)nQ_{normal} = \frac{Q_{min}}{\sum_{n=1}^{N}{(Q_{min})_n}}

6. Epoch Score

Sum of all Qnormal for a trader across all samples in an epoch: Qepoch=u=110,080(Qnormal)uQ_{epoch} = \sum_{u=1}^{10,080}{(Q_{normal})_u}

7. Final Score

Normalizes Qepoch by dividing by the sum of all market makers’ Qepoch in a given epoch. This value is multiplied by the rewards available for the market to get a trader’s reward: Qfinal=Qepochn=1N(Qepoch)nQ_{final}=\frac{Q_{epoch}}{\sum_{n=1}^{N}{(Q_{epoch})_n}}

Worked Example

Assume an adjusted market midpoint of 0.50 and a max spread config of 3 cents for both m and m’.

Step 2 - First Side Score

A trader has the following open orders:
  • 100Q bid on m @ 0.49 (spread = 1 cent)
  • 200Q bid on m @ 0.48 (spread = 2 cents)
  • 100Q ask on m’ @ 0.51 (spread = 1 cent)
Qne=((31)3)2100+((32)3)2200+((31)3)2100Q_{ne} = \left( \frac{(3-1)}{3} \right)^2 \cdot 100 + \left( \frac{(3-2)}{3} \right)^2 \cdot 200 + \left( \frac{(3-1)}{3} \right)^2 \cdot 100 Qne is calculated every minute using random sampling.

Step 3 - Second Side Score

The same trader also has:
  • 100Q bid on m @ 0.485 (spread = 1.5 cents)
  • 100Q bid on m’ @ 0.48 (spread = 2 cents)
  • 200Q ask on m’ @ 0.505 (spread = 0.5 cents)
Qno=((31.5)3)2100+((32)3)2100+((3.5)3)2200Q_{no} = \left( \frac{(3-1.5)}{3} \right)^2 \cdot 100 + \left( \frac{(3-2)}{3} \right)^2 \cdot 100 + \left( \frac{(3-.5)}{3} \right)^2 \cdot 200 Qno is calculated every minute using random sampling.

Steps 4-7

  1. Take the minimum of Qne and Qno (with single-sided adjustment if midpoint is in [0.10, 0.90])
  2. Normalize against all other market makers in the sample
  3. Sum across all 10,080 samples in the epoch
  4. Normalize again to get final reward share

The minimum reward payout is $1; amounts below this will not be paid.
Both min_incentive_size and max_incentive_spread can be fetched alongside full market objects via the CLOB API and Markets API. Reward allocations for an epoch can also be fetched via the Markets API.

Next Steps