Skip to main content

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:

ParameterValue
Staking typeLiquid
NetworksMainnet, Devnet
API minimum0.003 SOL
Stake activationImmediate (liquid)
Unbonding / lock when exitingInstant when paying the pool's withdrawal fee, or fee-free by waiting ~1 epoch
Rewards modelAccrues in JSOL (liquid)
Two ways out of JPool

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_fee in staking-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.

  1. Initiate stake: Use the stake action to craft a transaction with the amount of SOL you want to deposit (minimum 0.003 SOL).
  2. Transaction confirmation: Once confirmed on-chain, your SOL is staked in JPool.
  3. Receive JSOL: Your liquid staking position is represented by JSOL.

Unstake

Unstaking burns pool tokens and returns SOL to your wallet.

  1. Check pool token balance: Read the JSOL balance held by the wallet. The unstake action takes an amount in JSOL, not SOL.
  2. Initiate unstake: Use the unstake action with the pool token amount (JSOL, not SOL) you want to redeem.
  3. 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.

API interaction