ES

Stake Account

Delegates SOL to a validator's Vote account. Tracks staker/withdrawer authorities, lockup, delegated amount, and activation epochs.

Stake Program 200 bytes

Sample: Stake Account

(cached; refreshes hourly · mainnet only)

State Rent Exempt Reserve Authorized Staker Authorized Withdrawer Lockup: Unix Timestamp Lockup: Epoch Lockup: Custodian Voter Pubkey Stake Activation Epoch Deactivation Epoch Warmup/Cooldown Rate Credits Observed Data
0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 02 00 00 00 80 d5 22 00 00 00 00 00 5a 44 a3 4d
0010 0c 40 e6 87 ac 5c 09 17 46 92 92 3d 04 1e 7c ef
0020 c5 af 07 d1 38 e2 01 65 0e 6a c0 d2 5a 44 a3 4d
0030 0c 40 e6 87 ac 5c 09 17 46 92 92 3d 04 1e 7c ef
0040 c5 af 07 d1 38 e2 01 65 0e 6a c0 d2 00 00 00 00
0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0070 00 00 00 00 00 00 00 00 00 00 00 00 23 20 55 34
0080 75 5e 67 c5 d0 85 ab 0c 1c f3 e8 25 c3 fd 70 7d
0090 da c8 60 b1 6f e0 f0 50 a8 ab 08 17 35 ff eb 20
00a0 8f 4c 20 00 95 02 00 00 00 00 00 00 ff ff ff ff
00b0 ff ff ff ff 00 00 00 00 00 00 d0 3f da 2e b3 7c
00c0 00 00 00 00 00 00 00 00

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_staker and authorized_withdrawer can be different keys — cold storage holds the withdrawer while a hot key manages delegations.
  • deactivation_epoch = u64::MAX means “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.

Last verified: 2026-05-19