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)=(v−sv)2⋅b

Equation 2:

Equation 3:

Equation 4A:

If midpoint is in the range [0.10, 0.90] allow single-sided liq to score:

Equation 4B:

If midpoint is in either range [0, 0.10] or [0.90, 1.0] require liq to be double-sided to score:

Equation 5:

Equation 6:

Equation 7:

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.