Liquid Staking (LSTs)
Liquid staking tokens (LSTs) represent staked SOL that trades as SPL mints. Integrate them when users want staking yield without locking native SOL or when protocols accept LST collateral.
Search across all documentation pages
Liquid staking tokens (LSTs) represent staked SOL that trades as SPL mints. Integrate them when users want staking yield without locking native SOL or when protocols accept LST collateral.
Quick-reference recipe card - copy-paste ready.
# Stake SOL for jitoSOL via Jito CLI / stake pool UI
spl-token balance J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn// Sanctum - swap between LSTs
const res = await fetch("https://sanctum-api.example/swap", {
method: "POST",
body: JSON.stringify({ inputMint: "J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn", amount: "1000000000" }),
});When to reach for this:
import { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const jitoSolMint = address("J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn");
const msolMint = address("mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So");
const [jitoSupply, msolSupply] = await Promise.all([
rpc.getTokenSupply(jitoSolMint).send(),
rpc.getTokenSupply(msolMint).send(),
]);
console.log("jitoSOL supply:", jitoSupply.value.amount);
console.log("mSOL supply:", msolSupply.value.amount);What this demonstrates:
| LST | Mint | Operator |
|---|---|---|
| jitoSOL | J1toso1uCk3RLmjorhTtrVwY9HJ7X8V9yYac6Y7kGCPn | Jito |
| mSOL | mSoLzYCxHdYgdzU16g5QSh3i5K3z3KZK7ytfqcJm7So | Marinade |
| bSOL | bSo13r4TkiE4KumL71LsHTPpL2euBYLFx6h9HP3piy1 | BlazeStake |
// Convert LST amount to SOL equivalent using on-chain exchange rate
pub fn lst_to_sol(lst_amount: u64, sol_per_lst: u64, precision: u64) -> Result<u64> {
lst_amount
.checked_mul(sol_per_lst)
.and_then(|v| v.checked_div(precision))
.ok_or(ErrorCode::MathOverflow.into())
}sol_value / token_supply each render.
| Alternative | Use When | Don't Use When |
|---|---|---|
| Native stake | Maximum simplicity, no DeFi | You need composable collateral |
| SOL only | Widest acceptance | You forfeit staking yield |
| LRT/restaking products | Extra yield layers | You want audited, simpler risk |
No - balances stay fixed; the SOL value per token increases via exchange rate.
Read the Jito stake pool state account or use their API/SDK for stake_pool_exchange_rate.
A liquidity layer routing swaps between many LST mints - useful when your protocol accepts multiple LSTs.
Yes - LST mints trade like any SPL token on aggregated routes.
Jito operates the stake pool and MEV infrastructure; tips contribute to jitoSOL yield. See Jito & MEV.
Protocols apply haircuts due to depeg and liquidity risk - never treat 1 LST = 1 SOL for lending math.
Rare and complex - stake pool deposits need signer rules. Most protocols use client-signed deposits.
Limited pools - clone mainnet stake pool accounts or use Surfpool 0.12.0 fork.
Deposit, withdrawal, and epoch management fees vary - read Fee fields in pool state.
Every epoch when staking rewards are credited to the pool - typically ~2 days on mainnet.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 19, 2026