Injective Trading Docs
Injective | Trading
Injective | Trading
  • Getting Started
  • Learn
    • Basics
      • Order Types
      • Margin Trading
        • Liquidation
        • Funding Rates
        • Performing Liquidations
      • Trading Fees and Rebates
    • Derivatives
      • Perpetuals
      • Expiry Futures
      • Election Perpetual
      • Pre-Launch Futures
      • Index Perpetual Futures
  • Rewards
    • Open Liquidity Program (OLP)
      • Introduction
      • OLP Rewards
      • Epochs
      • Eligibility
      • Program Details
        • Scoring Formula/Methodology
        • Formula Parameters
        • Reward Allocations
        • Flexible Reward Allocations
        • Eligible Markets
        • Reward Allocations (Legacy)
      • Reward Disbursements
      • Performance Tracking
      • Volatility Response Modifications (VRMs)
    • Fee Tiers
  • Resources
    • Python SDK
    • TypeScript SDK
    • Go SDK
    • Injectived CLI
    • API Documentation
    • Mainnet Status
    • Injective Explorer
    • Testnet Faucet
    • Testnet Status
Powered by GitBook
On this page
  • Total Score
  • Liquidity Score
  • Uptime Score
  • Volume
  • Fully Expanded Formula
Export as PDF
  1. Rewards
  2. Open Liquidity Program (OLP)
  3. Program Details

Scoring Formula/Methodology

Scoring a Market Maker's Epoch Performance in a Single Market

PreviousProgram DetailsNextFormula Parameters

Last updated 6 months ago

Total Score

For any given market, an MM's (Market Maker's) TSTSTS (Total Score) in an epoch is calculated as:

TSMarket=(LSEpoch)a⋅(UptimeEpoch)b⋅(Volumeepoch)cTS_{Market} = (LS_{Epoch})^a \cdot (Uptime_{Epoch})^b \cdot (Volume_{epoch})^cTSMarket​=(LSEpoch​)a⋅(UptimeEpoch​)b⋅(Volumeepoch​)c

where LSepochLS_{epoch}LSepoch​ is the MM's in the market in the epoch, UptimeEpochUptime_{Epoch}UptimeEpoch​is the MM's in the market in the epoch, and VolumeepochVolume_{epoch}Volumeepoch​ is the MM's total volume (maker and taker) in the market in the epoch.

aaa, bbb, and ccc are exponent that weight the different components of the formula.

Liquidity Score

LSEpoch=∑N=140,320min⁡(LSNBid,LSNAsk)LS_{Epoch} = \sum \limits_{N=1}^{40,320} \min(LS_{N_{Bid}}, LS_{N_{Ask}})LSEpoch​=N=1∑40,320​min(LSNBid​​,LSNAsk​​)

The ’s Liquidity Score for a market in an epoch, LSEpochLS_{Epoch}LSEpoch​, is the sum of the minimum between the Bid and Ask Liquidity Scores (see below) across all order book snapshots in the epoch for the relevant market. This promotes dual-sided liquidity since single-sided liquidity will earn a Liquidity Score of 0 under the min⁡()\min()min() function.

A snapshot of the order book is taken randomly every 10-100 blocks. This is approximately every minute on average, which means there are approximately 40,320 snapshots in an epoch (60⋅24⋅28=40,320).(60 \cdot 24 \cdot 28 = 40,320).(60⋅24⋅28=40,320). In practice, the upper bound of the summation will vary depending on the actual number of snapshots in the epoch. For the purposes of this guide, we will assume that there were exactly 40,320 snapshots in the epoch.

LSNBid=BidDepth1Spread1+BidDepth2Spread2+…∀ BidDepthi≥MinDepth and Spreadi≤MaxSpreadLS_{N_{Bid}} = \frac{BidDepth_1}{Spread_1} + \frac{BidDepth_2}{Spread_2} + … \newline \forall \ BidDepth_i \geq MinDepth \text{ and } Spread_i \leq MaxSpreadLSNBid​​=Spread1​BidDepth1​​+Spread2​BidDepth2​​+…∀ BidDepthi​≥MinDepth and Spreadi​≤MaxSpread
LSNAsk=AskDepth1Spread1+AskDepth2Spread2+…∀ AskDepthi≥MinDepth and Spreadi≤MaxSpreadLS_{N_{Ask}} = \frac{AskDepth_1}{Spread_1} + \frac{AskDepth_2}{Spread_2} + … \newline \forall \ AskDepth_i \geq MinDepth \text{ and } Spread_i \leq MaxSpreadLSNAsk​​=Spread1​AskDepth1​​+Spread2​AskDepth2​​+…∀ AskDepthi​≥MinDepth and Spreadi​≤MaxSpread

LSNBidLS_{N_{Bid}}LSNBid​​ is the sum of all bid order depths divided by the spread of the order for all limit orders placed by the in snapshot NNN that exceed MinDepthMinDepthMinDepth in size and are within the MaxSpread.MaxSpread.MaxSpread.

LSNAskLS_{N_{Ask}}LSNAsk​​ follows the same logic as LSNBidLS_{N_{Bid}}LSNBid​​, but on the ask side of the order book.

SpreadSpreadSpread is calculated from the (distance from mid-price divided by mid-price).

Uptime Score

UptimeEpoch=∑N=140,320{1if min⁡(LSNBid,LSNAsk)>00otherwiseUptime_{Epoch} = \sum \limits_{N=1}^{40,320} \begin{cases}1&\text{if } \min(LS_{N_{Bid}}, LS_{N_{Ask}}) > 0\\ 0&\text{otherwise} \\\end{cases}UptimeEpoch​=N=1∑40,320​{10​if min(LSNBid​​,LSNAsk​​)>0otherwise​

For who qualify for OLP rewards (for the first time ever) partway through an epoch, UptimeEpochUptime_{Epoch}UptimeEpoch​ is scaled based on the total number of snapshots from the moment of qualification to the end of the epoch.

For example, suppose there are exactly 40,320 snapshots in an epoch and an qualifies for the first time with exactly 20,000 snapshots remaining. Also suppose the had an UptimeEpochUptime_{Epoch}UptimeEpoch​ of 18,0000 as defined by the scoring formula above during the remainder of the epoch. In this case, UptimeEpochUptime_{Epoch}UptimeEpoch​ would be scaled to 1800020000∗40320=36288\frac{18000}{20000}*40320 = 362882000018000​∗40320=36288.

For addresses that qualify partway through an epoch but have qualified in the past (the address failed to maintain eligibility at some point), UptimeEpochUptime_{Epoch}UptimeEpoch​ will not be scaled. This is to disincentivize addresses from losing their eligibility from epoch to epoch.

Volume

VolumeVolumeVolume is a 's cumulative eligible maker and taker volume in the market during the epoch.

Fully Expanded Formula

The fully expanded formula is:

TSMarket=TS_{Market} = TSMarket​=

(∑N=140,320min⁡(LSNBid,LSNAsk))a⋅(∑N=140,320{1if min⁡(LSNBid,LSNAsk)>00otherwise)b⋅Volumec\left(\sum \limits_{N=1}^{40,320} \min(LS_{N_{Bid}}, LS_{N_{Ask}})\right)^a \cdot \left(\sum \limits_{N=1}^{40,320} \begin{cases}1&\text{if } \min(LS_{N_{Bid}}, LS_{N_{Ask}}) > 0\\ 0&\text{otherwise} \\\end{cases} \right)^b \cdot Volume^c(N=1∑40,320​min(LSNBid​​,LSNAsk​​))a⋅(N=1∑40,320​{10​if min(LSNBid​​,LSNAsk​​)>0otherwise​)b⋅Volumec
where\text {where}where
LSNBid=BidDepth1Spread1+BidDepth2Spread2+…∀ BidDepthi≥MinDepth and Spreadi≤MaxSpreadLS_{N_{Bid}} = \frac{BidDepth_1}{Spread_1} + \frac{BidDepth_2}{Spread_2} + … \newline \forall \ BidDepth_i \geq MinDepth \text{ and } Spread_i \leq MaxSpreadLSNBid​​=Spread1​BidDepth1​​+Spread2​BidDepth2​​+…∀ BidDepthi​≥MinDepth and Spreadi​≤MaxSpread
LSNAsk=AskDepth1Spread1+AskDepth2Spread2+…∀ AskDepthi≥MinDepth and Spreadi≤MaxSpreadLS_{N_{Ask}} = \frac{AskDepth_1}{Spread_1} + \frac{AskDepth_2}{Spread_2} + … \newline \forall \ AskDepth_i \geq MinDepth \text{ and } Spread_i \leq MaxSpreadLSNAsk​​=Spread1​AskDepth1​​+Spread2​AskDepth2​​+…∀ AskDepthi​≥MinDepth and Spreadi​≤MaxSpread

For the current values of MinDepthMinDepthMinDepth and MaxSpreadMaxSpreadMaxSpread, see the .

UptimeEpochUptime_{Epoch}UptimeEpoch​ is the number of order book snapshots throughout the epoch in which the had a in the market of interest. This means the quoted on both sides of the order book with order sizes greater than or equal to MinDepthMinDepthMinDepth with spreads less than or equal to MaxSpreadMaxSpreadMaxSpread in the snapshot.

For information on individual reward calculations each epoch, see the .

Formula Parameters page
Reward Allocations page
parameters
Liquidity Score
Uptime score
positive Bid Liquidity Score and a positive Ask Liquidity Score