The Three Income Sources for Solana Stakers
Understanding how Solana validators generate income for their stakers through inflation rewards, block production fees, and MEV.
Overview
Staking on Solana allows token holders to earn passive income while helping secure the network by delegating their SOL to validators. Understanding the different income sources is crucial for both stakers choosing validators and validators optimizing their operations.
The Solana staker income model consists of three primary sources, which typically contribute to total earnings in the following approximate distribution:
- Inflation Rewards (Vote): ~35% of total income
- Block Production: ~55% of total income
- MEV: ~10% of total income
Let's explore each of these income sources in detail.
Inflation Rewards (Vote Fees)
As with most Layer 1 Proof of Stake networks, stakers earn rewards from the inflation of the supply of the native token. Validators earn these rewards when they vote on the validity of blocks. These rewards are distributed at the end of each epoch (approximately every 2-3 days) and typically result in an annual yield of 5-7% APY. An example of how to get inflation rewards is below:
1def get_inflation_reward(self, addresses: List[str], epoch: Optional[int] = None) -> List[Dict]:
2 """Get inflation reward for addresses"""
3 params = [addresses]
4 if epoch is not None:
5 params.append({"epoch": epoch})
6 return self.make_request("getInflationReward", params)
Validators can choose their commission rate for this income source, which is the percentage of the inflation rewards they keep. Most validators set their commission between 5-10%, though some may charge as low as 0% or as high as 100%.
Block Production
Validators are rewarded for producing blocks when they are selected as "slot leaders" - validators temporarily responsible for producing the next block in the chain. When selected, they collect transaction fees from that block.
Following the activation of SIMD-0096, block producers now receive:
- 100% of priority fees (additional fees users pay to prioritize their transactions)
- 50% of base fees (minimum transaction fees)
The remaining 50% of base fees are burned, adding deflationary pressure to the network.
Unlike inflation rewards, validators cannot directly adjust their commission rate on block production rewards at the protocol level - these go entirely to the validator.
A typical validator might produce blocks every few minutes, though this varies based on stake weight and network conditions. Determining the Block Production for your validator would look like this:
1def get_block_production(self, addresses: List[str], epoch: Optional[int] = None) -> List[Dict]:
2 """Get block production for addresses"""
3 params = [addresses]
4 if epoch is not None:
5 params.append({"epoch": epoch})
6 return self.make_request("getBlockProduction", params)
MEV (Maximum Extractable Value)
MEV represents the additional value validators can extract by strategically ordering transactions within blocks they produce. For example, a validator might prioritize a profitable arbitrage transaction, earning extra rewards in the process.
Most validators capture MEV by running a Jito client, which:
- Bundles profitable transactions together
- Ensures optimal transaction ordering
- Shares MEV rewards with stakers
Jito typically takes an 8% cut of MEV rewards, with the remainder split between validator and delegators based on the validator's commission rate.
To get MEV rewards for your validator, query the Jito API with your vote account address:
1def get_mev_rewards(self, vote_account: str, epoch: Optional[int] = None) -> List[Dict]:
2 """Get MEV rewards from Jito API"""
3 url = f"https://kobe.mainnet.jito.network/api/v1/validators/{vote_account}"
4 response = requests.get(url)
5 data = response.json()
6
7 # Filter by epoch if specified
8 if epoch is not None:
9 return [d for d in data if d["epoch"] == epoch]
10 return data