Overview

By posting resting limit orders, liquidity providers (makers) are automatically eligible for Polymarket’s incentive program. The overall goal of this program is to catalyze a healthy, liquid marketplace. We can further define this as creating incentives that:

  • Catalyze liquidity across all markets
  • Encourage liquidity throughout a market’s entire lifecycle
  • Motivate passive, balanced quoting tight to a market’s mid-point
  • Encourages trading activity
  • Discourages blatantly exploitative behaviors

This program is heavily inspired by dYdX’s liquidity provider rewards which you can read more about here. In fact, the incentive methodology is essentially a copy of dYdX’s successful methodology but with some adjustments including specific adaptations for binary contract markets with distinct books, no staking mechanic a slightly modified order utility-relative depth function and reward amounts isolated per market. Rewards are distributed directly to the maker’s addresses daily at midnight UTC.

Methodology

Polymarket liquidity providers will be rewarded based on a formula that rewards participation in markets (complementary consideration!), boosts two-sided depth (single-sided orders still score), and spread (vs. mid-market, adjusted for the size cutoff!). Each market still configure 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.

VariableDescription
$order 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

Equation 1:

S(v,s)=(vsv)2bS(v,s)= (\frac{v-s}{v})^2 \cdot b

Equation 2:

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}

Equation 3:

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}

Equation 4:

Equation 4a:

If midpoint is in range [0.10,0.90] allow single sided liq to 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))

Equation 4b:

If midpoint is in either range [0,0.10) or (.90,1.0] require liq to be double sided to score:

Qmin=min(Qone,Qtwo)Q_{\min} = \min({Q_{one}, Q_{two}})

Equation 5:

Qnormal=Qminn=1N(Qmin)nQ_{normal} = \frac{Q_{min}}{\sum_{n=1}^{N}{(Q_{min})_n}}

Equation 6:

Qepoch=u=110,080(Qnormal)uQ_{epoch} = \sum_{u=1}^{10,080}{(Q_{normal})_u}

Equation 7:

Qfinal=Qepochn=1N(Qepoch)nQ_{final}=\frac{Q_{epoch}}{\sum_{n=1}^{N}{(Q_{epoch})_n}}

Steps

  1. Quadratic scoring rule for an order based on position between the adjusted midpoint and the minimum qualifying spread

  2. Calculate first market side score. Assume a trader has the following open orders:

    • 100Q bid on m @0.49 (adjusted midpoint is 0.50 then spread of this order is 0.01 or 1c)
    • 200Q bid on m @0.48
    • 100Q ask on m’ @0.51

    and assume an adjusted market midpoint of 0.50 and maxSpread config of 3c for both m and m’. Then the trader’s score is:

    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

    QneQ_{ne} is calculated every minute using random sampling

  3. Calculate second market side score. Assume a trader has the following open orders:

    • 100Q bid on m @0.485
    • 100Q bid on m’ @0.48
    • 200Q ask on m’ @0.505

    and assume an adjusted market midpoint of 0.50 and maxSpread config of 3c for both m and m’. Then the trader’s score is:

    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

    QnoQ_{no} is calculated every minute using random sampling

  4. Boosts 2-sided liquidity by taking the minimum of QneQ_{ne} and QnoQ_{no}, and rewards 1-side liquidity at a reduced rate (divided by c)

    Calculated every minute

  5. QnormalQ_{normal} is the QminQ_{min} of a market maker divided by the sum of all the QminQ_{min} of other market makers in a given sample

  6. QepochQ_{epoch} is the sum of all QnormalQ_{normal} for a trader in a given epoch

  7. QfinalQ_{final} normalizes QepochQ_{epoch} by dividing it by the sum of all other market maker’s QepochQ_{epoch} in a given epoch this value is multiplied by the rewards available for the market to get a trader’s reward

Both min_incentive_size and max_incentive_spread can be fetched alongside full market objects cia both the CLOB API and Markets API. Reward allocations for an epoch can be fetched via the Markets API.