Lending / Yield·Solana
Sanctum
LST infrastructure on Solana: the Sanctum Router for atomic cross-LST swaps, the Infinity (INF) multi-LST liquidity pool, and tooling that lets any validator launch a branded liquid-staking token. Built by Igneous Labs.
- 01swapping between any pair of Solana LSTs (jitoSOL, mSOL, bSOL, INF, etc.)
- 02minting / redeeming the INF multi-LST index
- 03launching a validator-branded LST
- 04LP'ing into the Infinity pool for diversified LST yield
- pnpm add @solana/web3.js @coral-xyz/anchor
| Variable | Scope | Description |
|---|---|---|
| SOLANA_RPC_URL | Server | Solana mainnet RPC. Sanctum Router cranks load many stake-pool state accounts per swap. |
Sanctum exposes its router primarily via Jupiter — for app code, `@jup-ag/api` will already route LST↔LST through Sanctum and you should NOT reimplement it. For direct integration use the open-source `igneous-labs/sanctum-router-sdk` (Rust + WASM bindings) or hit the Sanctum quote/swap HTTP API at `https://sanctum-extra-api.ngrok.dev` (`GET /v1/swap/quote`, `POST /v1/swap`). For minting INF, fetch the LST stake-pool program addresses from `learn.sanctum.so/docs` and compose a deposit-stake or deposit-sol instruction. Always read the underlying stake pool's `lastUpdateEpoch` to confirm prices are fresh for the current epoch.
- ⚑LST↔LST conversion rates only update once per epoch (~2 days on Solana) — quote responses include `epoch` and `lastUpdate`; reject swaps where `currentEpoch > stakePool.lastUpdateEpoch` and force a `UpdateStakePool` crank ix first.
- ⚑Sanctum Router can fan out to many sub-accounts per swap; CU consumption can exceed 1.2M. Set `setComputeUnitLimit({ units: 1_400_000 })` and a priority fee or the tx silently fails.
- ⚑Withdrawals from a stake pool to native SOL require the pool's reserve to have liquidity — INF redemptions can return a stake account (not SOL) when liquidity is thin; handle the `StakeAccount` return path explicitly.
- ⚑INF pool is a multi-asset pool, so deposit/withdraw composition affects the price impact — for large flows, route through Jupiter or split the deposit across multiple LSTs.
- ⚑Validator-branded LSTs use SPL stake-pool program variants — the program ID may differ per LST; verify `stakePool.programId` before signing.
- ⚑Sanctum has no published @sanctumso npm package; integrations are typically via Jupiter routing or the Igneous Labs Rust SDK with WASM bindings.