Staking Flow
Before interacting with the API methods, it is useful to understand how JPool works on Solana.
JPool is a liquid staking protocol on Solana. JPool's stake pool allows users to deposit SOL and receive a liquid pool token (JSOL) in return, representing their staked position.
Staking user journey
A high-level view of what happens to your funds and the wait times involved. Each box is a state of your position; the arrows are the actions (and the time) that move between them.
Staking parameters
Key parameters for planning a JPool integration:
| Parameter | Value |
|---|---|
| Staking type | Liquid |
| Networks | Mainnet, Devnet |
| API minimum | 0.003 SOL |
| Stake activation | Immediate (liquid) |
| Unbonding / lock when exiting | Instant when paying the pool's withdrawal fee, or fee-free by waiting ~1 epoch |
| Rewards model | Accrues in JSOL (liquid) |
JPool offers two exit routes, and they trade fee against speed:
- Instant, paying a fee: the pool returns SOL from its reserve straight away, minus the withdrawal fee (
withdrawal_feeinstaking-info). - Fee-free, waiting ~1 epoch: instead of taking SOL from the reserve, you receive a stake account that you deactivate and withdraw yourself, on the same cooldown as Solana native staking.
The Staking API's unstake action crafts the instant, fee-paying route. The fee-free route is a JPool protocol feature and is not currently exposed as a separate API action; contact us if your integration needs it.
Liquid staking
JPool lets SOL holders earn staking rewards while remaining liquid. When you stake SOL into the JPool stake pool, the protocol delegates it to the pool's validator set and mints JSOL representing your share of the pool.
JSOL appreciates against SOL over time rather than changing in quantity: rewards accrue into the pool, so each JSOL is redeemable for a growing amount of SOL. The staking-balance endpoint reports the position already converted to SOL in staked_amount.
Deposit and withdrawal fees
The pool charges a SOL deposit fee when staking and a SOL withdrawal fee when unstaking. The staking-info endpoint returns the withdrawal fee as a percentage in withdrawal_fee. Account for it when estimating the SOL you will receive on unstake, because staked_amount is the value of your pool tokens before fees.
The withdrawal fee is what buys you the instant exit. Waiting ~1 epoch instead avoids it, at the cost of the delay (see the note above).
Stake
Staking deposits SOL into the JPool stake pool and mints the liquid pool token.
- Initiate stake: Use the stake action to craft a transaction with the amount of SOL you want to deposit (minimum
0.003SOL). - Transaction confirmation: Once confirmed on-chain, your SOL is staked in JPool.
- Receive JSOL: Your liquid staking position is represented by
JSOL.
Unstake
Unstaking burns pool tokens and returns SOL to your wallet.
- Check pool token balance: Read the
JSOLbalance held by the wallet. The unstake action takes an amount inJSOL, not SOL. - Initiate unstake: Use the unstake action with the pool token amount (JSOL, not SOL) you want to redeem.
- Receive SOL: The protocol burns the pool tokens and returns SOL from the pool reserve, net of the withdrawal fee. This is instant: there is no cooldown to wait out.
Signing
JPool reuses the standard Solana transaction flow. Crafting endpoints return a hex-encoded unsigned_tx_hex, which you sign, prepare, and broadcast exactly like native Solana staking. See the JPool integration example for a full worked flow, including signing.