Trading Reward Programme

Consider the following notation:
Reward for a specific trader h.
Total Trading Reward for the epoch for the respective product. This reward will be split amongst all traders, with allocation dictated by a formula.
Fees paid by the trader on this product over the epoch.
The score of the particular trader h over the epoch.
A trader’s average open interest measured as every minute (at random) across all markets for a given product over this epoch.
Total number of traders in this epoch.
A constant which balances the geometric weight between fees versus open interest. The value is set at 0.7.


The formulas for calculating rewards for trading are as follows. Each trader
wh=fhα×dh1αw_h= f_h^{\alpha} \times d_h^{1-\alpha}
Rh=R×whnwnR_h= R \times \frac{w_h}{\sum_n w_n}
n=1,2,...,kn = 1, 2, ..., k
  • The total reward '
    ' is in PB tokens.
  • The formula for '
    ' specifies how the reward for that period is split amongst all participants. This is like game theory: if you are the only player in town, you get all the bounty, so long as you have at least a bit of an open interest over the period and at least done some trading.
  • For more participants, it splits the bounty proportionally to their level of participation, measured as a function of fees and open interest as described by the formula.


Notice that for Options, the open interest is measured as follows every minute by:
dh,min=i=1nj=1m{O(C,Ki,Tj)+O(P,Ki,Tj)}d_h,_{min} = \sum_{i=1}^n \sum_{j=1}^m \{O(C,K_i,T_j)+ O(P,K_i,T_j)\}
dh=j=1Jdmin(j)d_h=\sum_{j=1}^J d_{min}(j)
The time of snapshotting the open interest is random over the minute, so to avoid any systematic bias.
  • Net the Open Interest by strikes and expiries, for each call and put:
    O(C,Ki,Tj)=abs(netPosition(C,Ki,Tj))O(C,K_i,T_j) = abs(netPosition(C,K_i,T_j))
    O(C,Ki,Tj)=abs(netPosition(P,Ki,Tj))O(C,K_i,T_j) = abs(netPosition(P,K_i,T_j))
    Where Open Interest refers to the net Notional Value of the particular option.
  • So for each strike, expiry and call/put category, net the positions and take absolute value (assuming we are indifferent to net long/short).
  • Client Total Open Interest:
    • Open interest, sampled every minute:
      dh,min=i=1nj=1mO(C,Ki,Tj)+O(P,Ki,Tj)d_h,{min} = \sum{i=1}^n \sum_{j=1}^m {O(C,K_i,T_j)+ O(P,K_i,T_j)}
      measured as an average over every minute across the month/14 days (sampled randomly in every minute).
    • dh=j=1Jdh,min(j)d_h=\sum_{j=1}^J d_{h,min}(j)
      where J is the total number of minutes over the period (14 days ).
    • fhf_h
      = total fees$ paid over the month/14 days, but fees taken in absolute value.
    • α=0.7\alpha= 0.7
    • Trader score
      w=fα×d(1α)w = f^{\alpha} \times d^{(1-\alpha)}
    • Portion of reward per trader:
      Rh=R×whnwnR_h= R \times \frac{w_h}{\sum_n w_n}
      n=1,2,...,kn = 1, 2, ..., k
  • Rationale for the way to account for options: a long call/short put same strike results in a synthetic forward, so Put/Call cannot be accounted for in same bucket.
  • Likewise for calls with same expiry and different strikes: they represent a "spread" which means they are valid trades, not netting out. Similar for calendar spreads.
  • By taking into account all products, we are incentivising traders to have positions across all strikes/expires.


  • Notice that traders would be rewarded for trades executed, hence AMMs would only be compensated if their range is relevant and takers trade over that period.
  • Even though fees for Market Makers are zero, a "virtual fee" to reward makers is used for the reward calculation when their trades are executed. This is for now set at:
    • fmakervirtual=0.07%f^{virtual}_{maker}=0.07\%
    • The system keeps track of which trades are from maker / taker.
  • For spot,
    • Trader score
      w=fαw = f^{\alpha}
      , where
      is different for trades which are market orders (taker) or limit orders (maker).
    • Portion of reward per trader:
      Rh=R×whi=nNwnR_h = R \times \frac{w_h}{\sum_{i=n}^N w_n}
      n=1,2,...,kn= 1, 2,..., k