About StakeView.app

StakeView.app is a service that ranks Solana validators by returns. It gives up-to-date information on current and historical financial performance of Solana validators. This information can be used in determining which Solana validator or validators to delegate stake to.

Can I report bugs or ask questions?

Sure you can! Please email us at: shinobisystems@yahoo.com. Alternately, you can report issues in the Shinobi Systems Discord: https://discord.gg/JZJWEc4xef.

How do I use StakeView.app?

StakeView.app consists of two main sections:

The control buttons include:


selects Validator View, which is a performance ranked list of all Solana validators.

selects Stake View, which is currently not implemented, but when implemented will allow a stake delegator to track their staking results.

shows the current epoch details in the validator list. The current epoch is in progress and until it is complete, the list is a prediction of the epoch results based on the current standings within the epoch.

shows the rankings from the most recently completed epoch (about 3 days).

shows the rankings from the three most recently completed epochs, as an average APY value for those epochs (about 8 days).

shows the rankings from the ten most recently completed epochs, as an average APY value for those epochs (about 25 days).

shows the rankings from the thirty most recently completed epochs, as an average APY value for those epochs (about 75 days).


The validators are then listed in order of achieved APY. Each row lists the validator ranking number, achieved APY, validator icon, and validator name. The text "copy vote account" may be clicked to copy the vote account id to the clipboard, which can then be pasted in any wallet's staking menu to stake to that validator. If the validator has a website, the text "website" will appear in the row and can be clicked on to visit the validator's website.

Hovering over or clicking on a validator row will display additional details for that validator.

Is the data provided here accurate?

StakeView.app is accurate for all completed epochs. After an epoch completes, its data is captured and the exact APY achieved by every validator is calculated and saved. The APY achieved by validators is obtained by: As you can see, the APY is calculated from the actual returns achieved by stake accounts, and is the true and accurate APY paid out by the validator for that epoch. Since all stake accounts are paid at the same APY rate for a given validator in a given epoch, computing the APY achieved by one stake account for each validator for the epoch is sufficient to determine the APY that it acheived for all stake accounts for the epoch.

The answer is a bit more complicated for the current epoch in progress. This is because the actual achieved APY will only be known after the epoch completes and all factors that go into computing APY, which require the full epoch's data to be accurate, are known. In the meantime, StakeView.app estimates the performance of validators by:


So for example, if the best APY from the previous epoch was 8.09%, then the validator with the highest "vote credits * (1 - commission)" of the current epoch is listed at 8.09% APY for this epoch. If the next validator has a "vote credits * (1 - commission)" value that is 99.15% that of the best performing validator, then it will be listed at (0.9915 * 8.09%) which is 8.02%. All validators are then assigned expected APY in this way.

This is not a perfect metric, but it has been found to be very close to the actual results achieved after the epoch completes, and what's more, the relative rankings of validators are 100% accurate given this technique, even if the absolute value of the APY achieved ends up being different. So in other words, you can trust the ranking order as being accurate, even if the actual APY values might be slightly different by the time the epoch ends.

What does "APY" mean exactly?

"APY" stands for "Annual Percentage Yield". It is a term that represents how much would be paid out, including compounded interest, as a percentage of the amount of SOL in the stake account at the beginning of the year. This means that for an APY of 8.65%, a 100 SOL balance at the beginning of a year's term of staking would have become 108.65 SOL at the end of the year's term. Of course, stake accounts don't have to be staked for an entire year to earn rewards; the actual amount earned will depend on how long the stake was delegated and accumulating rewards. But APY is a good way to compare returns across validators, as it uses a standardized time period (one year) and a standardized method of measuring the returns. And it includes compounding, which makes sense with Solana staking since staking rewards do compound since rewards are paid back into the stake account as new, delegated stake that itself earns rewards unless withdrawn.

Note that "APY" is different from "APR". "APR" is almost the same thing as APY, but does not include compounding. For this reason, it is generally a less useful term, but it is still used in some contexts (for example, the solana command line reports rewards as APR, as does solanabeach.io). APR is usually a fraction smaller than APY - an epoch with returns corresponding to 8.65% APY might represent 8.40% APR.

So if my validator is rated at 8.13% APY, does that mean I am guaranteed to earn 8.13% over the course of a year?

No, it does not. The APY values are listed per-epoch or per group-of-epochs (as an average of the past 3, or past 10 epochs, etc). This represents how much reward would be earned by a stake account if the validator earned the exact same returns every epoch. But returns fluctuate every epoch; they depend on individual validator performance, the total amount of staked SOL across all validators, and the duration of epochs. All of these factors are likely to change over time. APY for a given epoch is therefore representative of likely yearly APY for a validator, but is almost certainly only an approximation. The best way to get an idea of the most likely returns is to look at the longest possible time span across which returns are averaged - and that means using the "All" button. But even this is not a guarantee of future results, because although returns are less likely to deviate from long term trends than they are to deviate from short term trends, they can still deviate. APY is generally expected to slowly go down over time as the inflation rate is reduced on a pre-calculated schedule.

StakeView.app data is still useful though, because it allows relative comparisons between validators over varying time ranges. It is useful to know that a new validator, for example, performs relatively well compared to more established validator; or that a certain validator is often in the top rankings over every time range.

How can I verify the validity of the StakeView.app data?

The data that StakeView.app uses is all publicly available on the Solana block chain. The easiest way to query for this data is to install the Solana command line tools and query for it yourself:
  1. Install the Solana command line tools: follow these installation instructions.
  2. For a given validator, find a stake account that is staked to that validator:
    $ solana stakes

    search the output for the Delegated Vote Account address of the validator of interest, and find a Stake Pubkey for a stake account that is delegated to the validator.
  3. Use the solana command line to fetch returns for the past 10 epochs for this stake account:
    $ solana stake-account --with-rewards --num-rewards-epochs=10 <STAKE_ACCOUNT_PUBKEY>
  4. Note that the results will be displayed as APR, not APY, so they will be slightly less than the APY listed by StakeView.app.
Example:
I want to verify that Shinobi Systems results are valid. Shinobi Systems vote account id is: BLADE1qNA1uNjRgER6DtUFf7FU3c1TWLLdpPeEcKatZ2.
So I run
solana stakes
and find a stake account that has been staked to Shinobi Systems for many epochs. The stake account address is GBXaJi2oPuacrPa7CFRQUDEaLJw9a9LakEAbx6Ns5uC6.
Then I run:
solana stake-account --with-rewards --num-rewards-epochs=10 GBXaJi2oPuacrPa7CFRQUDEaLJw9a9LakEAbx6Ns5uC6

The result is:
      Balance: 235.626764421 SOL
      Rent Exempt Reserve: 0.00228288 SOL
      Delegated Stake: 235.624481541 SOL
      Active Stake: 235.624481541 SOL
      Delegated Vote Account Address: BLADE1qNA1uNjRgER6DtUFf7FU3c1TWLLdpPeEcKatZ2
      Stake Authority: CMSY2WjRTKB2QhYFfq75U17bSSbMdtiWTW5EEP8cp7DE
      Withdraw Authority: 3vgL1KJ3axRxWBMVxeJEChYEraMTZ52ivjr9b9ScX4qE
      Lockup Timestamp: 2022-01-14T00:00:00Z
      Lockup Custodian: Mc5XB47H3DKJHym5RLa9mPzWv5snERsF3KNv5AauXK8
      Epoch Rewards:
        Epoch   Reward Slot  Amount              New Balance         Percent Change             APR
        193     83808004     ◎0.151845524        ◎235.626764421               0.06%           7.74%
        192     83376000     ◎0.151951865        ◎235.474918897               0.06%           7.77%
        191     82944009     ◎0.151487392        ◎235.322967032               0.06%           7.75%
        190     82512000     ◎0.151619529        ◎235.171479640               0.06%           7.83%
        189     82080000     ◎0.151111958        ◎235.019860111               0.06%           7.85%
        188     81648000     ◎0.153360975        ◎234.868748153               0.07%           7.87%
        187     81216004     ◎0.150639269        ◎234.715387178               0.06%           7.83%
        186     80784000     ◎0.151969355        ◎234.564747909               0.06%           7.65%
        185     80352000     ◎0.162676492        ◎234.412778554               0.07%           8.25%
        184     79920000     ◎0.151901189        ◎234.250102062               0.06%           7.47%
I can see that for epoch 193, the APR was 7.74%. StakeView.app lists the APY for epoch 193 as 8.06%. The difference is because one value is APR (no compounding) and the other is APY (with compounding).

StakeView.app lists the duration of epoch 193 as 3 days 0 hours 56 minutes 33 seconds. I can verify this myself but it is more complicated because I need a way to look up the epoch duration, which can be done by knowing the number of the first and last slot of the epoch and running

solana block-time
for these slots and computing the duration. But assuming that StakeView.app is accurate (and it is!), epoch 193 was 262,593 seconds long. There are 31,557,600 seconds in a 365.25 day year (which is the average duration of a year, including leap days); therefore there are (31557600 / 262593) = 120.177 epochs in a year assuming all epochs are as long as epoch 193.

The actual rewards factor achieved in epoch 193 (with more precision than the solana command line provides) is (0.151845524 / 235.474918897) = 0.0006448479. So to calculate the APY for that:

 ((1 + 0.0006448479) ^ 120.177) - 1 

which is 0.080550705. Multiply by 100 to get percent, and the result is 8.06, which matches the StakeView.app reported APY of 8.060%.

Isn't it suspicious that Shinobi Systems, the creator of StakeView.app, is usually at the top of the returns list?

No! Shinobi Systems usually achieves the highest APY, and this is factual and can be verified using any of the methods described above. This is not guaranteed to last forever - other validators may improve their APY, or Shinobi Systems may raise its commission, which would reduce its APY.

But my favorite validator reports returns of 10.3% on their website, and StakeView.app reports 7.21%. Which is correct?

The value reported by StakeView.app is correct. Many validators exaggerate their returns on their web sites, presumably in hopes of gaining more stakers. StakeView.app is the only source that provides true, verifiable performance rankings that includes actual computed APY values, not empty promises.

I want to incorporate the APY values presented here into my own app. Is there an API available for fetching these values?

The data is available as a set of JSON files that are updated frequently. You can simply fetch these JSON files and find the data available in a very simple format within the files. The format and URLs of these files is documented here.