Accounting
8 min read

Accounting for staking rewards on Solana

Learn how to account for Solana staking rewards and MEV. Explore staking mechanics, journal entries, and key considerations for accurate reporting

Zac Hogg, CPA
Zac Hogg, CPA
Jul 25, 2025
Accounting for staking rewards on Solana
Sponsored

👋 gm accountants

This article is meant for non-technical users of Solana who may be engaged in staking activities. The purpose of this article is to provide information on how to obtain accounting and finance related data for determining how to account for income earned on-chain through staking on Solana.

More specifically, this article will cover; 

  • How staking on Solana works
  • How staking accounts are structured on Solana
  • Authority and other accounts relevant to native staking on-chain on Solana
  • What happens after you start staking
  • Other rewards earned while staking (MEV)
  • Journal entries with Solana staking rewards

How Staking on Solana works

On Solana, staking is done through a delegated-proof-of-stake (“dPOS”) mechanism. The act of delegating means you delegate your SOL to a validator in order to provide security to the network.

Delegated-proof-of-stake is different from traditional proof of stake in that your SOL remains completely under your control (custodianship) during the entire staking (delegating) process. Of course, we should caveat that last sentence by stating that is the normal case when “natively” staking on-chain. 

Staking through third party providers, exchanges, stakepool contracts, or other means than the delegated proof of stake natively on-chain may have different control and custodian mechanisms.

Join The Accountant Quits Movement

Upskill, get hired, and connect with a global community of Web3 accountants.

How Staking Accounts (Staking Addresses) are Structured on Solana

Solana has a useful and structured token account setup. When you review your address on-chain, for our purposes we can call this your “receiving” address (the public key) or for Solana staking terminology, your “withdrawal authority address”. You’ll find that this address/pubkey owns a number of “token accounts” which each individually represent a different Solana-Program-Library (SPL) token account for your wallet. 

For example, the pubkey/receiving address/withdrawal authority address of J5qTqktWizT45bE8EjNFeosuV8a4bRac6muAXYpgFXjg holds a number of token accounts, one for each of the various stablecoins that the wallet owner has in its possession.

For example: 

  1. Token account Account E7fZKbR23hxQQVZRaw6VrGxJnL9SZLiN4d4VB52aeYRq | Solscan represents the USDC balance held by J5qTqktWizT45bE8EjNFeosuV8a4bRac6muAXYpgFXjg, and
  2. Token account Account 4evSRQd7kNCKtC5okp6TAQM5qf34bXxDf4RgbQmMFEzL | Solscan represents the USDG balance held by J5qTqktWizT45bE8EjNFeosuV8a4bRac6muAXYpgFXjg.

Similar to token accounts for SPL assets held by a respective withdrawal authority address, there are stake accounts that a withdrawal authority address owns which represents a value of SOL which can be delegated to a validator on the network for the dPOS process. SOL can only be staked/delegated in one of these stake accounts. 

Authority and Other Accounts Relevant to Native Staking on-chain on Solana

In the context of the full setup for stake accounts/staking addresses, there are a number of relevant authority accounts. There are three authority accounts that have differing rights over the stake address and the other relevant account is the validator’s vote account which the SOL is delegated to.

Mandatory: withdrawal authority address

This address has the authority to “withdraw” funds from this address i.e. move them from the stake address to the withdrawal authority or to another withdrawal authority.

Mandatory: staking authority address

Generally, this is the same address as the withdrawal authority address, but you can also give your stake authority to another address on-chain. The stake authority address can determine how the SOL is delegated within the stake account. An example of providing stake authority to another address than your own withdrawal authority address is Marinade native or Marinade select. Providing Marinade the stake authority allows them to stake on your behalf to their entire validator set within the validator cluster.

Optional: lockup authority address

This address sets the unlock date for a stake address if the SOL is sent locked, or if the withdrawal authority owner decided to lock the SOL in their own stake account. SOL with an active lockup authority address is considered “locked” and has to remain within the stake address until it programmatically unlocks. At the time of unlocking, the lockup authority address deprecates and the withdrawal authority can withdraw funds as usual. For the purposes of this article, locked SOL can also be staked, and determining the rewards is the same process.

Optional (but Mandatory in order to be actively staking): validator vote account

The validator vote account represents the account on-chain that determines which validator that you have delegated your SOL with. The vote account of a validator is the account you specifically reference when determining which validator you wish to stake with.

In order for the stake account to earn staking rewards, one must delegate their SOL from the stake account to a validator. The staking mechanism on Solana is dPOS which means you delegate your SOL to the validator but you maintain custody of the SOL through the withdrawal authority.

Once delegated, you will earn the programmatic inflationary rewards earned by stakers that represents the inflationary rate of the network - less a commission that the validator may charge for their services.

If the SOL is not (yet) delegated, there won’t be an active delegation or validator vote account associated with the staking address.

What Happens After You Start Staking

Once you have created a stake account (presumably with a self custodial wallet meaning the withdrawal and stake authority are your own address), deposited SOL into the stake account, and delegated SOL to a validator vote account, you will then start to earn staking rewards at the start of the next epoch. Epochs, on Solana, can be thought of as individual periods in which staking rewards are earned and your SOL is delegated to a validator. 

Once you have delegated your SOL to a validator, your SOL is “activating” for one epoch, and similarly, when you undelegate/unstake your delegation, your SOL is “deactivating” for one epoch. An epoch generally lasts 2-3 days. During each epoch in which your SOL is actively staked (neither activating nor deactivating), staking rewards are earned. 

Staking rewards are earned through reward slots - rather than atomic transaction hashes. Staking rewards earned through reward slots are automatically added to your staked account balance and thus create a compound effect for future epoch and reward earning periods.

For example, Account 4zNpTCd2Qi2G7oqWDKTKx59u6AKW84f9oZgLBCRR1JSP | Solscan is a stake account owned by J5qTqktWizT45bE8EjNFeosuV8a4bRac6muAXYpgFXjg - this stake account was activated on Epoch 718 on December 28, 2024. The SOL then began earning rewards, which are paid through “reward slots”, earning its first reward of 0.0004006 SOL in Epoch 719. 

(Refer to Activation tx hash & rewards slots on Epoch 719)

Other Rewards Earned while Staking (MEV)

Staking addresses now also earn non-staking rewards income which may be termed “MEV” or minor-extracted-value. MEV is paid on Solana to anyone who delegates to a validator that runs the Agave-Jito enabled validator client. 

Jito tips are paid to validators to bundle and transmit transactions, and then validators who delegate SOL to these validators are redistributed a return for the MEV earned by the Agave-Jito enabled protocol. 

The MEV earned on Jito tips does not increase your staked balance within the staking address because the amounts are in fact paid by atomic transaction hashes, increasing the total SOL in the SOL address, but not in the staked balance. 

In the future, block rewards and other rewards will be programmatically distributed by validators running Agave-Jito and/or other validator client software.

(Refer to MEV reward example from Epoch 719)

Summary - How to determine your Solana Staking Rewards

  • Step 1: Determine all of your withdrawal authority addresses
  • Step 2: Figure out your staking addresses you had withdrawal authority ownership of for all of time (past and present)
  • Step 3: Obtain the staking rewards (reward slots) for all epochs you owned these staking addresses for, and 
  • Step 4: Obtain the MEV rewards (atomic tx hashes) data for those aforementioned individual staking addresses

Journal Entries and Examples

Delegating SOL

In the scenario that you delegate 100 SOL, there is no journal entry to record, as you still own the SOL that moved from a withdrawal authority address to a staking address.

Providing stake authority of a stake address to another entity

In the scenario that you provide staking authority for the 100 SOL (or some portion of the 100 SOL) to another entity, there is no journal entry to record, as you still own the SOL in this staking address because you hold the (keys to the) withdrawal authority (address)

Earning staking rewards

As you earn staking rewards through reward slots each epoch, you would generally record the FMV of the SOL at the end of day closing price within the relevant epoch. For example, if you earned 1 SOL at $175:

DR SOL Asset $175 (SOL * Closing Price of day in epoch) 

CR SOL Staking Income $175

Earning MEV rewards

MEV rewards would generally be recorded in a similar fashion as staking rewards, as earned/sent to your staking address through tip routing transaction hashes. For example, if we earned 0.5 SOL at $150:

DR SOL Asset $75 (SOL * Closing Price of day in epoch)

CR SOL MEV Income $75

Withdrawing Stake

If you undelegate the SOL, deactivating the active stake, and then withdraw the SOL in question, there is no journal entry to record (except for any network fees) as this is still SOL you own, you are not receiving any new SOL than what was already deposited and/or earned.

Example of an entry for recording transaction/network fees on these movements:

DR Transaction/Gas/Wallet/Network Fees Expense $0.01 (Solana is fast and cheap)

CR SOL Asset $0.01

End of Period Valuation

Normally, an entity would compare the price of the staking and MEV rewards earned against the closing price for the period and perform impairment or revaluation entries depending on the accounting policies and conventions established for your entity. 

An example impairment scenario from our earlier staking and MEV rewards example would be a closing price at end of year of $100/SOL. In that circumstance, we would need to impair our SOL we earned to $100, as the cost we’ve capitalized this SOL at is higher than the FMV at the reporting date.

In this scenario, the staking rewards would be impaired by $75 (1 SOL * ($175 - $100)) and the MEV rewards would be impaired by $25 (0.5 SOL * ($150 - $100)). 

Example entries:

DR Impairment Loss Staking Income $75

CR SOL Asset $75 

(Staking income value when capitalized less closing period FMV)

DR Impairment Loss MEV Income $25

CR SOL Asset $25 

(MEV income value when capitalized less closing period FMV)

Conclusion

Staking on Solana offers a powerful way to earn rewards while maintaining full custody of your assets but it comes with unique accounting challenges. Unlike EVM chains, Solana’s structure of withdrawal authority addresses and stake accounts introduces complexities that traditional crypto subledgers often fail to capture when implementing similar network support to their EVM counterparts.

Most subledger solutions are built for EVM environments, where the concept of “owned stake accounts” doesn’t exist. This means many subledgers with basic “out of the box” support are not usable for native Solana staking, as they don’t account for the relationships between withdrawal authority addresses and stake accounts. Counterintuitive to basic subledger practices, staking rewards are not earned through transactions but through reward slots that increase a staked balance in a staking address. Furthermore, MEV transactions as atomic transaction hashes to a staking address is a relatively new concept.

A few subledgers have built in this logic, recognizing that movements between owned addresses are actions, not sends or receives. The appropriate subledger tools on the market are ones that can track each stake address (opened or closed) and understand each of these reward inputs, staking and MEV. Tools like these are essential for creating accurate subledger entries, tracking staking rewards, and integrating MEV income and having a holistic understanding of your SOL balances and earnings across all of your withdrawal and staking addresses.

Zac Hogg, CPA
Zac Hogg, CPA
Controller @Solana Foundation

Zac Hogg, CPA (ON), CPA (NY) is the Controller at the Solana Foundation. He leads the Accounting and Finance day to day operations for the organization. He has been involved in accounting for web3 businesses for the better part of 5 years. Better known as Mr “If I mint it for a dollar, can redeem it for a dollar, and spend it for a dollar, and we agree that it is worth a dollar, then it is in fact a dollar” and other web3 accounting convention simplifications to help in further advancing the industry for every day users.

Zac originally worked at eToro US before joining the Solana Foundation in late 2022, offering a mix of experience in both centralized and decentralized web3 and web3 adjacent businesses, specializing in scaling lean accounting teams from 0 to 1.