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 hh:

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} with n=1,2,...,kn = 1, 2, ..., k

  • The total reward 'RR' is in PB tokens.

  • The formula for 'RhR_h' 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} with 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, α\alpha = 11.

    • Trader score w=fαw = f^{\alpha} , where ff 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} with n=1,2,...,kn= 1, 2,..., k

Last updated