in-solana by Supanode

Stake Program — Program ID & Instructions

Stake11111111111111111111111111111111111111

The Stake Program manages SOL staking on Solana. It handles stake account creation, delegation to validators, deactivation, and withdrawal.

Program ID

Stake11111111111111111111111111111111111111

Key instructions

InstructionDescription
InitializeCreates a new stake account with staker and withdrawer authorities
DelegateStakeDelegates stake to a vote account (validator)
DeactivateBegins the unstaking process (takes 1 epoch to complete)
WithdrawWithdraws SOL from a deactivated stake account
SplitSplits a stake account into two accounts
MergeMerges two stake accounts into one
AuthorizeWithSeedAuthorizes a staker/withdrawer via a derived key

Stake account lifecycle

Create → Initialize → Delegate → Active (earning rewards)
                                     ↓
                               Deactivate → Cooldown (1 epoch) → Withdraw

A stake account transitions through these states:

  1. Uninitialized: account exists but has no stake configuration.
  2. Initialized: has staker/withdrawer authorities but not delegated.
  3. Delegated/Activating: delegated, waiting for the next epoch to start earning.
  4. Active: earning staking rewards.
  5. Deactivating: deactivation requested, waiting for epoch boundary.
  6. Deactivated: can be withdrawn.

Authorities

AuthorityCan do
StakerDelegate, deactivate, split, merge
WithdrawerWithdraw, change authorities, close account

Both authorities are set at initialization and can be changed by the withdrawer.

FAQ

How long does it take to unstake SOL? Deactivation takes effect at the next epoch boundary. Epochs are approximately 2–3 days long. After deactivation completes, SOL can be withdrawn immediately.

What is the minimum stake amount? The minimum is the rent-exempt minimum for a stake account (~0.00228 SOL). However, validators may have their own minimum delegation preferences.

Can I split a staked account? Yes. The Split instruction divides a stake account into two, with the specified amount going to the new account. Both accounts remain delegated to the same validator.

Updated: