Affiliated company Matrixed.Link: official Chainlink node operator running 500+ live price feeds
Liquid Staking

Solana Liquid Staking Tokens: JitoSOL, mSOL, jupSOL and INF

How JitoSOL, mSOL, jupSOL and INF accrue value on Solana: a rate refreshed each epoch, three different programs and why INF's SOL ratio means something else.

7 min read

Solana’s liquid staking tokens do not pay out. Your balance of JitoSOL, mSOL or jupSOL stays the same while each token becomes redeemable for more SOL, because the pool’s exchange rate is refreshed once per epoch as staking rewards land. INF, Sanctum’s token for a pool that holds many of these tokens, also rises against SOL. Its ratio is built from the rates of the tokens in the pool, so the same words mean something different for INF than for the other three.

For a risk, treasury or data team the practical questions are which program holds the rate, when it can change and what the rate does not tell you about the market price. The sections below take them in that order.

The epoch is the clock

An epoch on Solana is a fixed 432,000 slots, the span for which one leader schedule is valid. How long that takes in wall-clock time has changed. Solana cut its slot time from 400 milliseconds to 200 milliseconds in four staged steps between August and October 2026, with the last step on 9 October 2026. Solana’s upgrade page says an epoch now lasts roughly a day, where it used to last roughly two. We read recent block timing from a public Solana RPC endpoint in October 2026 and it agreed.

Some protocol documentation still describes epochs as lasting about two days. Several stake pool and LST docs still carry that wording at the time of writing. Marinade’s page says “currently about 1 day”. Treat the older figure as stale until the page you rely on says otherwise. Solana’s own page also warns that a slot count multiplied by 400 milliseconds no longer describes elapsed time.

The epoch matters because Solana’s documentation says rewards for an epoch are not available until that epoch ends. Stake warmup and cooldown are counted in epochs too. So the rate of a staking token cannot move smoothly. It steps when the pool has accounted for a finished epoch.

Three tokens, three programs

All four tokens use nine decimals, as SOL does. The programs behind them differ.

JitoSOL: the SPL stake pool program

JitoSOL runs on the SPL stake pool program. The program pools SOL that an off-chain agent, a delegation bot, spreads across validators. A deposit returns pool tokens that represent a fractional share of the pool. Jito’s documentation gives the rate in the program’s own terms:

SOL per token =
  total_lamports / pool_token_supply

The pool’s total_lamports field carries a last_update_epoch marker. If it does not match the current epoch, the program’s source says the total may not be accurate. A pool can hold hundreds of stake accounts, so the refresh is split across several instructions. One of them, UpdateStakePoolBalance, updates the total pool balance from the reserve and the validator list. When we read the JitoSOL pool account on 23 October 2026 its last update epoch matched the current epoch.

Two consequences follow. A rate is as fresh as the last update that ran. A rate can also fall: Jito’s documentation says it is designed to rise as rewards accumulate but could decrease in extreme scenarios such as validator slashing or smart contract bugs.

JitoSOL has a second reward source besides inflation. Jito’s validator client runs an auction where traders bid for transaction sequences. Winning bids go to validators and their stakers. Jito’s documentation says the proceeds pass through to JitoSOL after a commission and are handled at epoch boundaries. It also says rewards accrue in the price rather than as a distribution, so a reader of the ratio sees staking and MEV as one number.

jupSOL: Sanctum’s version of the same program

jupSOL represents SOL staked with the Jupiter validator. Jupiter’s documentation says it is built on Sanctum’s SPL stake pool program. Sanctum describes its tokens as using a fork of that program. We read the jupSOL pool account on 23 October 2026. It is owned by the program that Sanctum lists as its multi stake pool program, it carries the same last update marker and it showed the same epoch as the JitoSOL pool.

Jupiter describes an exchange-rate model. The balance stays fixed while the jupSOL to SOL ratio rises as staking rewards, MEV rewards and priority fees accrue to the pool. One consequence it states plainly: depositing 1 SOL today returns less than 1 jupSOL. Sanctum and Jupiter both publish fee schedules for these pools. The two describe different fee models, so read the page that matches the pool you are pricing.

mSOL: Marinade’s own program

mSOL is the exception. Marinade does not use the SPL stake pool program. We checked on chain on 23 October 2026 that Marinade’s state account is owned by Marinade’s own program. Marinade’s documentation lists the same two addresses.

The model is the same in spirit. Marinade says that after each epoch the value of mSOL is recalculated from the rewards the pool earned, with the price defined as total staked divided by tokens minted. Your mSOL balance never changes and there is nothing to claim.

The mechanics differ from the stake pool. The program stores the price in a msol_price field as SOL per mSOL, scaled by a fixed denominator of 2 to the power of 32. A bot that Marinade calls a crank updates it at each epoch boundary once rewards have landed. The instructions it calls are permissionless. A comment in Marinade’s source describes the field as one for front ends, not for token amount calculation. Validators for the pool are chosen through Marinade’s Stake Auction Marketplace instead of a fixed list.

Anyone reading these rates in code therefore needs two read paths. The two stake pool tokens give a ratio from two fields of one account. mSOL exposes a stored price in another program’s state. Each yields SOL per token through different plumbing.

INF is a pool of tokens

INF is the token of Sanctum Infinity, which Sanctum describes as a shared liquidity pool of many Solana liquid staking tokens. You deposit any supported LST or SOL to receive INF, then burn INF to withdraw a share of any LST or SOL in the pool. INF is the LP token. Sanctum’s guide describes one INF as a share of the total SOL value of all the LSTs the pool currently holds.

That is why the SOL ratio means something different for INF. For JitoSOL or mSOL the ratio is one pool’s accounting: one total divided by one supply. INF’s value is derived from the accounting of other protocols. Sanctum’s technical documentation describes value calculator programs that read each held LST’s on-chain state and mirror that protocol’s own pricing. Its examples cover Marinade’s mSOL, Sanctum LSTs and wrapped SOL, as well as non-Sanctum tokens such as jitoSOL and bSOL. Swaps in the pool are priced at those intrinsic SOL values rather than from a constant-product curve.

Sanctum states that INF is a reward-bearing token, not a rebasing one. The balance does not grow. Each INF becomes worth more relative to SOL, which is why Sanctum’s guide has a heading asking why 1 INF is not equal to 1 SOL. The value follows a weighted average of the yields of the held tokens plus fees the pool captures from trades. Each epoch, Sanctum says, excess SOL over the pool’s target is staked into top-performing LSTs within the pool.

The result is a ratio with several inputs. A JitoSOL rate steps when one pool finishes its epoch update. An INF value can move when any held token’s rate steps, when swap fees land or when the pool reallocates. It follows the epoch clock indirectly, through the tokens it holds. A ratio that puts INF beside the single-pool tokens needs that difference in mind.

What the rate does not tell you

A program rate states what a token is worth inside its own accounting. A market price is what a pool pays for it. Jupiter’s documentation says the market price of jupSOL can temporarily fall below its redeemable value. Marinade separates a token’s true price in the protocol from its price on exchanges, which it says arbitrage usually corrects. The sibling article on how liquid staking tokens are priced covers the same split for Ethereum tokens.

Exits explain why the two can differ. A delayed unstake waits for the epoch to end. Jito’s documentation says up to one epoch and quotes about two days, which matches the older epoch length. Marinade says about one epoch and charges a protocol fee for it. An instant exit is a swap on a decentralized exchange, where you pay the route’s costs and the price impact. The buyer on the other side takes over the wait.

Three habits follow for a team that consumes these tokens:

  • Read the rate when you need accounting value, then check the update marker to see which epoch it describes.
  • Between updates a pool’s rate stands still. A move in a token’s SOL ratio from a market feed between updates comes from the market, not from the protocol.
  • Treat INF separately. Its rate is derived, so record which inputs you are reading.

The market side is what our feed pages show. The JitoSOL USD feed, the mSOL price feed, the jupSOL feed page and the INF market feed each give the dollar price of one token. The Solana LST prices hub groups them. How those prices are built from on-chain markets is described in DEX-native price feeds.

Sources

Frequently asked

Questions & answers

What is JitoSOL?

JitoSOL is the pool token of Jito's stake pool, which runs on the SPL stake pool program. Your balance stays fixed while each token redeems for more SOL as staking and MEV rewards accrue. Jito's documentation states the rate as total pool lamports divided by pool token supply.

How does mSOL work?

mSOL is the receipt for SOL staked with Marinade, which runs its own program rather than the SPL stake pool. After each epoch the price is recalculated as total staked divided by tokens minted. Your mSOL balance never changes; rewards reach you through the rate.

What is Sanctum INF?

INF is the token of Sanctum Infinity, a shared pool that holds many Solana liquid staking tokens. One INF is a share of the pool's total SOL value, so its value against SOL rises as the held tokens earn rewards and the pool captures swap fees.

What is jupSOL?

jupSOL is a liquid staking token for SOL staked with the Jupiter validator, built on Sanctum's version of the SPL stake pool program. It uses an exchange-rate model: your balance stays fixed and the jupSOL to SOL ratio rises as rewards accrue to the pool.

How long is a Solana epoch?

An epoch is 432,000 slots. Since slot time fell to 200 milliseconds in October 2026, Solana's documentation puts an epoch at roughly a day, down from roughly two. Some protocol documentation still describes the longer epoch, so check the date of any page you rely on.

Get in touch

Ready for price data you can defend?

Whether you are a protocol pricing collateral, a risk team monitoring depegs, an asset manager marking a book or an exchange onboarding a data vendor, our team is ready to help.

Our affiliate Matrixed.Link is trusted by
ChainlinkEnjinPolygondRPC