Stake Account
Delegates SOL to a validator's Vote account. Tracks staker/withdrawer authorities, lockup, delegated amount, and activation epochs.
Sample: Stake Account
(cached; refreshes hourly · mainnet only)
What it is
A Stake account delegates SOL to a validator’s Vote account to earn staking rewards. The 200-byte layout tracks who can manage the stake, how much is delegated, and when activation or deactivation lands.
Why it exists
Solana’s proof-of-stake consensus runs on these delegations. SOL holders create Stake accounts pointing at a validator’s Vote account; the Stake program manages epoch-based activation, computes per-epoch rewards, and records the credits the validator has earned. Liquid staking protocols like Marinade and Jito hold large pools of Stake accounts on behalf of their depositors.
Byte layout
The layout is a 4-byte state enum followed by a Meta struct and (when state = Stake) a Delegation struct.
| Offset | Length | Field | Type | Notes |
|---|---|---|---|---|
| 0 | 4 | state |
u32 enum |
0 Uninitialized, 1 Initialized, 2 Stake, 3 RewardsPool. |
| 4 | 8 | rent_exempt_reserve |
u64 LE |
SOL reserved for rent exemption. |
| 12 | 32 | authorized_staker |
Pubkey |
May delegate, deactivate, split, merge. |
| 44 | 32 | authorized_withdrawer |
Pubkey |
May withdraw funds. Typically held in cold storage. |
| 76 | 8 | lockup.unix_timestamp |
i64 LE |
Lockup expires at this UNIX time. |
| 84 | 8 | lockup.epoch |
u64 LE |
Lockup expires at this epoch. |
| 92 | 32 | lockup.custodian |
Pubkey |
May bypass the lockup. |
| 124 | 32 | voter_pubkey |
Pubkey |
Vote account this stake delegates to. |
| 156 | 8 | stake_amount |
u64 LE |
Delegated SOL in lamports. |
| 164 | 8 | activation_epoch |
u64 LE |
Epoch when delegation activates. |
| 172 | 8 | deactivation_epoch |
u64 LE |
u64::MAX if still active. |
| 180 | 8 | credits_observed |
u64 LE |
Validator credits at last reward calc. |
Total: 200 bytes (offsets 188-199 are warmup/cooldown padding in older layouts, zero in current).
Where you see it
Validator dashboards, liquid staking flows, and any RPC call that walks delegations (getStakeActivation, getProgramAccounts on the Stake program).
Common gotchas
- Two-step authorities.
authorized_stakerandauthorized_withdrawercan be different keys — cold storage holds the withdrawer while a hot key manages delegations. deactivation_epoch = u64::MAXmeans “still active.” A finite value means deactivation has been requested; the stake cools down over one epoch before funds become withdrawable.- Stake doesn’t immediately earn rewards. Activation takes one full epoch. Rewards land at the start of each subsequent epoch.
See also
Last verified: 2026-05-19