Skip to main content
JLP (Jupiter Liquidity Provider) is the liquidity pool token that powers Jupiter Perpetuals. The JLP pool serves as the counterparty for all perpetual trades, providing liquidity for traders to open highly-leveraged positions up to 250x on SOL, WETH, and WBTC. When you deposit assets into the JLP pool, you receive JLP tokens representing your share of the pool. As a liquidity provider, you earn 75% of fees generated by the perpetuals exchange, these fees are automatically and directly accrued into the JLP pool.

How JLP Works with Perps

The JLP pool operates as a trader-to-LP exchange model, where:

Pool-Based Liquidity

  • Single Liquidity Pool: All liquidity comes from the JLP pool, not from resting orders or order books
  • Direct Trading: Traders open and close positions directly against the pool
  • Unlimited Size: Trade size is limited only by available pool liquidity and position-level constraints
  • Oracle-Based Pricing: All trades execute at oracle prices, ensuring large trades don’t affect prices for others

Pool Composition

The JLP pool manages several custodies (tokens) for liquidity providers: Each asset has a target weightage that the pool maintains through rebalancing mechanisms. The pool uses these assets to:
  • Provide collateral backing for long positions (SOL, WWETH, WBTC)
  • Provide collateral backing for short positions (USDC)
  • Cover trader profits when positions are closed
  • Earn fees for liquidity providers through trading and borrowing

How Traders Interact with JLP

  1. Opening Positions: When a trader opens a leveraged position, they deposit collateral and borrow the remaining position size from the JLP pool
  2. Closing Positions: When positions are closed, profits are paid from the pool’s assets, while losses are added to the pool
  3. Borrow Fees: Traders pay continuous borrow fees to the pool based on their position size and the pool’s utilization rate
  4. Trading Fees: All open/close fees flow into the pool (with 25% going to the protocol)
The pool’s AUM (Assets Under Management) represents the total value of assets in the pool, calculated as: AUM=USD value of owned tokensUSD value reserved for trader profits\text{AUM} = \text{USD value of owned tokens} - \text{USD value reserved for trader profits}

Becoming a Liquidity Provider

To become a JLP liquidity provider, you need to mint JLP tokens by depositing one of the supported assets (SOL, WETH, WBTC, USDC) into the pool.
  • JLP can be acquired through swapping on jup.ag which finds the best price either by other DEXes or the pool itself.
  • Or through the JLP Earn, which mints or burns JLP tokens directly from the pool.
For detailed instructions on minting and burning JLP tokens, refer to the Getting JLP guide.

JLP Lending

JLP tokens can be used as collateral to borrow USDC from the pool, creating additional utility and yield opportunities for liquidity providers.This feature allows liquidity providers to:
  • Access liquidity without selling their JLP position
  • Potentially increase their yield through leverage
  • Maintain exposure to JLP returns while borrowing for other purposes
For detailed information on JLP lending mechanics, position management, and borrowing limits, refer to the JLP Lend documentation.

Economics

Key Concepts

With the introduction of USDC lending from the JLP, the following definitions represent the true state of the custody accounts: Debt

debt=max(custody.debtcustody.borrowLendInterestsAccrued, 0)1,000,000,000\text{debt} = \frac{\max\left(\text{custody.debt} - \text{custody.borrowLendInterestsAccrued},\ 0\right)}{1{,}000{,}000{,}000}The custody account’s debt field represents the tokens borrowed from the custody.
This gives the pure debt amount without accumulated interests.
Theoretically Owned

theoreticallyOwned=custody.assets.owned+debt(custody)\text{theoreticallyOwned} = \text{custody.assets.owned} + \text{debt}(\text{custody})This represents the “true” owned token amount by the custody.
Borrowed tokens are not stored in custody.assets.owned, so this calculation provides the actual value of assets owned by the pool.
Total Locked

totalLocked=custody.assets.locked+debt(custody)totalLocked = custody.assets.locked + debt(custody)This represents the “true” locked token amount by the custody, including borrowed tokens: Similar to the theoretically owned value above, this returns the actual locked token amount by the custody.

Assets Under Management

The AUM for each custody account in the pool is calculated as follows. Stablecoins (USDC)

aumUsd=theoreticallyOwned×currentTokenPrice\text{aumUsd} = \text{theoreticallyOwned} \times \text{currentTokenPrice}
Non-stablecoins (SOL, WETH, WBTC)
  1. First, calculate the global short position profit/loss (Unrealized PNL in USD).
  2. Second, check if the short traders are in profit.
  3. Finally, calculate the assets under management.

unrealizedShortPNL=shortSize×shortAvgPricecurrentTokenPriceshortAvgPrice\text{unrealizedShortPNL} = \frac{\text{shortSize} \times \left| \text{shortAvgPrice} - \text{currentTokenPrice} \right|}{\text{shortAvgPrice}}
  1. Global short position profit/loss (Unrealized PNL in USD):
    • shortSize = custody.assets.globalShortSizes
    • shortAvgPrice = custody.assets.globalShortAveragePrices

  1. Check if shortAvgPrice > currentTokenPrice. If true, short traders are in profit, otherwise they are in loss.

aumUsd=custody.assets.guaranteedUsd±unrealizedShortPNL\text{aumUsd} = \text{custody.assets.guaranteedUsd} \pm \text{unrealizedShortPNL}
  1. Assets under management for each asset:
    • If the short traders are in profit, subtract unrealizedShortPNL from aumUsd.
    • Otherwise, add unrealizedShortPNL to aumUsd.
  • The guaranteed_usd value in each custody account represents an estimate of the total size of all long positions. It is only an estimate as guaranteed_usd is only updated when positions are updated (i.e. opening / closing positions, updating collateral). It does not update in real-time when asset prices change.
  • The guaranteed_usd value is used to calculate the pool’s AUM as well as the overall PNL for all long positions efficiently.
Total AUM The Total AUM is then calculated as the sum of all the custodies’ AUM.

totalAumUsd=aumUsd\text{totalAumUsd} = \sum \text{aumUsd}

Virtual Price and Market Price

Virtual Price

virtualPrice=totalAumUsdjlpTotalSupply\text{virtualPrice} = \frac{\text{totalAumUsd}}{\text{jlpTotalSupply}}The virtual price represents the intrinsic value of each JLP token based on the pool’s underlying assets.
Market Price

marketPrice=virtualPrice+marketAssignedPremium\text{marketPrice} = \text{virtualPrice} + \text{marketAssignedPremium}The market price of JLP is determined by supply and demand on the open market (e.g., through DEX swaps). It can differ from the virtual price depending on market conditions.When the AUM limit is hit and deposits are restricted, liquidity providers will seek for circulating JLP in the open market, causing demand for JLP to exceed supply, leading to a market price premium above the virtual price.
You may sell your JLP at market price any time (by swapping it with other tokens on DEXes). However, if Market Price is below the Virtual Price, your JLP will be redeemed (burned) at the virtual price instead.

APR/APY Calculation

The APR and APY for JLP are updated weekly based on the fees generated by the pool (in USD) from perps trading activities. 75% of these fees are distributed to JLP holders, excluding asset appreciation and traders’ PnL. Fees are reinvested by being redeposited into the pool every hour. You can refer to JLP Earn page for more details. APR Formula

APR=feesDistributedToJLPtotalAumUsd\text{APR} = \frac{\text{feesDistributedToJLP}}{\text{totalAumUsd}}
  • feesDistributedToJLP\text{feesDistributedToJLP} = total USD value of 75% of perps trading fees generated over the last 7 days (excluding protocol share).
  • totalAumUsd\text{totalAumUsd} = current total AUM of the pool.
  • The APR is expressed as an annualized rate, updated weekly based on the prior week’s fees.
APY Formula

APY=(1+APR52)521\text{APY} = \left(1 + \frac{\text{APR}}{52}\right)^{52} - 1
  • Fees are automatically compounded every hour, but the website calculates APY with a weekly compounding interval (n=52n = 52).
  • This APY is denominated in USD and reflects only the compounded yield from 75% of perps trading fees, not asset price appreciation or trader PnL.
  • APR\text{APR} is taken from the previous formula.
  • 5252 is the number of compounding periods per year (weekly).

Pool Rebalancing

The JLP pool maintains target weightages for each asset to ensure balanced exposure and optimal risk management. Each asset has a target weightage—the ideal proportion relative to the pool’s total AUM—and a current weightage that reflects the actual proportion at any given time. When swaps occur between JLP assets, they affect each asset’s weightage:
  • Swapping into the pool (e.g., depositing SOL) increases that asset’s current weightage
  • Swapping out of the pool (e.g., withdrawing SOL) decreases that asset’s current weightage
For example, swapping 100 SOL for 100 USDC reduces SOL’s pool size (and current weightage) while increasing USDC’s pool size (and current weightage). The pool uses dynamic fee adjustments to incentivize swaps that move assets toward their target weightages, while discouraging swaps that move them further away. This mechanism protects JLP holders by maintaining pool balance and rewards them when swaps help rebalance the pool. For details on how fees adjust, see the Fees documentation.
  • Risk Management: Balanced exposure prevents over-concentration in any single asset, reducing vulnerability to extreme price movements
  • Liquidity Optimization: Proper asset distribution ensures the pool can efficiently serve both long and short traders
  • Fee Generation: Rebalanced pools can better accommodate trading activity, leading to more consistent fee generation

Global Realized PNL

  1. Longs: uses locked tokens value minus guaranteed USD (collateral-based).
  2. Shorts: uses size × absolute price difference divided by average entry price (price-difference-based).
Most accurate way to calculate the unrealized PNL for all open long/short positions is to loop through all open positions (by fetching them from onchain accounts) and use the unrealized PNL calculation shown below.
Calculating Global Unrealized PNL for Longs To get an estimate of the global unrealized PNL for longs:
1

guaranteedUsd=custody.assets.guaranteedUsd\text{guaranteedUsd} = \text{custody.assets.guaranteedUsd}
  • Using the custody account
  • Get the assets.guaranteedUsd field which stores the value of
    position.sizeUsd - position.collateralUsd for all open long positions for the custody.
  • Note that a position’s sizeUsd value is only updated when a trade is made, which is the same for guaranteedUsd as well. It does not update in real-time when the custody’s price changes.
2

lockedTokensUsd=custody.assets.locked×currentTokenPriceUsd\text{lockedTokensUsd} = \text{custody.assets.locked} \times \text{currentTokenPriceUsd}
  • Multiply custody.assets.locked by the custody’s current price to get the USD value of the tokens locked by the pool to pay off traders’ profits
3

globalUnrealizedLongPNL=lockedTokensUsdguaranteedUsd\text{globalUnrealizedLongPNL} = \text{lockedTokensUsd} - \text{guaranteedUsd}
  • Subtract guaranteedUsd from lockedTokensUsd to get the estimate of unrealized PNL for all open long positions.
  • Note that the final value is greater than the actual unrealized PNL as it includes traders’ collateral
Calculating Global Unrealized PNL for Shorts To get an estimate of the global unrealized PNL for shorts:
1

globalShortSizes=custody.assets.globalShortSizes\text{globalShortSizes} = \text{custody.assets.globalShortSizes}globalShortAveragePrices=custody.assets.globalShortAveragePrices\text{globalShortAveragePrices} = \text{custody.assets.globalShortAveragePrices}
  • Using the custody account
  • Get the assets.globalShortSizes field which represents the total USD value of all open short positions.
  • Get the assets.globalShortAveragePrices field which represents the average entry price (in USD) of all open short positions.
2

priceDifferenceRatio=globalShortAveragePricescurrentTokenPriceUsdglobalShortAveragePrices\text{priceDifferenceRatio} = \frac{ \left| \text{globalShortAveragePrices} - \text{currentTokenPriceUsd} \right| }{ \text{globalShortAveragePrices} }
  • Calculate the absolute price difference ratio between the average entry price and the current token price.
  • This represents the percentage change in price since the average entry.
3

globalUnrealizedShortPNL=globalShortSizes×priceDifferenceRatio\text{globalUnrealizedShortPNL} = \text{globalShortSizes} \times \text{priceDifferenceRatio}
  • Multiply globalShortSizes by priceDifferenceRatio to get the estimate of unrealized PNL for all open short positions.

Yield

The JLP token adopts a growth-focused approach, similar to accumulating ETFs like VWRA or ARKK. Rather than distributing yield through airdrops or additional token mints, the JLP token’s value is designed to appreciate over time. This appreciation is driven by the growth of the JLP pool’s AUM, which is used to derive the virtual price as shown above. 75% of all fees generated from Jupiter Perpetuals trading, token swaps, and JLP minting/burning are reinvested directly into the JLP pool. This mechanism continuously enhances the pool’s liquidity and value for token holders. The remaining 25% of fees is allocated to Jupiter as protocol fees, supporting ongoing development and maintenance. For example, if trading activities generate 10 SOL in fees, 7.5 SOL would be added to the JLP pool, increasing its SOL holdings and AUM. Fees generated by the pool are reinvested directly back into the JLP pool, mirroring how accumulating ETFs reinvest dividends. This reinvestment strategy compounds the pool’s growth, steadily increasing the JLP token’s price and intrinsic value.

Exposure

The intrinsic value of the JLP token is linked to the price movements of the liquidity pool’s underlying tokens (SOL, WETH, BTC, USDC). As a JLP holder, your portfolio is exposed to market movements, particularly to the performance of the non-stablecoin tokens: SOL, WETH, and BTC. If these tokens decrease in price, the value of your JLP position will likely decrease as well. That said, JLP holders earn yield from fees generated by trading activities. When traders incur losses, these are reinvested into the JLP pool, benefiting JLP holders. Conversely, when traders profit, it comes at the expense of the JLP pool. The JLP usually outperforms its underlying assets during sideways or bearish market conditions since traders often struggle to be profitable in bear markets. However, during strong bull markets, the situation can reverse. Traders may open more long positions which can lead to trader profitability at the expense of JLP holders.

Risk Considerations

JLP holders are exposed to risks that can impact their portfolio:
RiskDescription
Market VolatilityRapid price movements can negatively impact the JLP. Extreme market events or black swan scenarios may cause correlations between assets to break down, potentially amplifying losses instead of mitigating them.
Counterparty RiskThe JLP pool poses a counterparty risk to JLP holders, as smart contract vulnerabilities or platform issues could potentially impact the ability to maintain or close hedge positions. That said, Jupiter is working with leading firms in the field to audit and maintain our contracts to protect the Jupiter Perpetuals exchange and JLP holders.
Opportunity CostCapital allocated to acquiring JLP could potentially earn higher returns if allocated elsewhere. In bull markets for example, JLP may underperform compared to simply holding the underlying assets. JLP holders should thoroughly research and understand the benefits and risks of the JLP token before acquiring them.