suideveloper
All questions
Consensus, validators and staking

How are Sui staking rewards calculated and paid?

October 31, 2026

At the end of every epoch, the protocol pools that epoch's computation gas fees and the stake subsidy. It splits them among active validators in proportion to voting power. Each validator keeps its commission (0–20%), and the rest goes into its staking pool, which raises the pool's SUI-per-pool-token exchange rate. Stakers aren't sent rewards. Their StakedSui is simply worth more when they withdraw, and rewards compound automatically.

The calculation, step by step

This is what advance_epoch in the sui_system framework does at each epoch change:

  1. Collect the reward pot. Total reward = computation fees for the epoch + the stake subsidy for the epoch.
  2. Carve out the storage fund's share. The storage fund takes a share of computation fees equal to its share of (storage fund + total stake). 5% of that is reinvested in the fund (storage_fund_reinvest_rate = 500 bps). The remainder is split equally among validators and isn't shared with stakers.
  3. Split the rest by voting power. Each validator gets reward × voting_power / 10,000.
  4. Apply reports. If a quorum of validators reported a validator during the epoch, it loses 100% of its staking rewards for that epoch (reward_slashing_rate = 10000 bps). The forfeited amount goes to the other validators.
  5. Take commission. The validator keeps reward × commission_rate. Its commission plus its storage-fund share are staked back into its own pool as a new StakedSui.
  6. Pay the pool. The remaining reward is deposited into the staking pool. A new exchange rate is recorded for the next epoch.

How your share is worked out

Your stake is tracked as pool tokens, bought at the exchange rate of your activation epoch. When you withdraw in epoch E', the framework uses the rate recorded at the start of E':

Text
SUI returned = principal × rate(E') / rate(activation epoch)

So you earn for every full epoch your stake was active. You don't earn for the epoch in which you stake, because stake activates next epoch. You don't earn for the epoch in which you withdraw, because that epoch's rewards haven't been distributed yet.

The stake subsidy

The subsidy comes from a fixed allocation held in the system state, not from new issuance. It pays a set amount each epoch, and that amount falls by 10% every 90 epochs. As of epoch 1291 (25 October 2026), the on-chain values were:

  • current_distribution_amount: about 254,187 SUI per epoch
  • stake_subsidy_period_length: 90 epochs
  • stake_subsidy_decrease_rate: 1000 bps (10%)
  • Remaining subsidy balance: about 226 million SUI

When the subsidy runs out, rewards come only from fees. Read the current values with:

Terminal
curl -s https://graphql.mainnet.sui.io/graphql \
  -H 'content-type: application/json' \
  -d '{"query":"{ epoch { epochId systemState { json } } }"}' \
  | jq '.data.epoch.systemState.json.stake_subsidy'

What actually changes your yield

  • Total stake. The same reward pot spread over more stake means less per SUI.
  • Network activity. More transactions mean more computation fees.
  • Commission. A validator with 5% commission passes on more than one with 20%.
  • Validator behaviour. A validator that gets reported loses that epoch's rewards for all its stakers.

Which validator you pick doesn't change the per-SUI reward much, apart from commission and reports. Rewards are split by voting power, and voting power is proportional to stake, except for validators at the 10% voting-power cap. Don't trust APY figures without checking how they were computed. You can derive the real figure from a pool's exchange rates across epochs.

Related: how staking works, how to unstake, and Sui tokenomics.

Sources

More on consensus, validators and staking