Photo by Markus Spiske on Unsplash

Expected return is the primary metric that demonstrates validator’s earning performance. In this post, I will attempt to illustrate how it is calculated over some examples. The delegator journey video below does a great job explaining how the concept of effective stake impacts expected returns; make sure to watch before diving into this post.

A validator’s expected return depends on two main factors:

  • Effective stake: Validators in each shard share the block rewards with respect to their effective stake. Note that effective stake itself depends on a validator’s bid and the median stake in the system.
  • Signing ratio: Expected return is calculated at the end of each epoch, block rewards are distributed only for the blocks signed by the validator.

Key rules:

  • The total block rewards created for each shard is a fixed number. If a shard has less validators than other shards, the earnings will be higher.
  • Block rewards are distributed at each block.
  • Expected return snapshot is calculated at the end of each epoch, and is shown for the last epoch on staking dashboard
  • Expected return on staking dashboard shows an average of expected return snapshots over the last 30 epochs since open staking launch.

Terminology

  • Expected return (ER): Average expected return of a validator for last 30 epoch (or epochs since first staking epoch). This is the metric shown on staking dashboard.
  • Expected return snapshot (ERS): Return rate of a validator at a given epoch. Notice that this value is more dynamic.

Let’s break it down with some examples: There are 4 steps to calculate a validator’s expected return in a given epoch

For simplicity, we made the following assumptions:

  • Single shard
  • 5 slots and 3 validators (A, B, C, D, E and X, Y, Z)
  • reward per block = 1 ONE
  • blocks per epoch = 10
  • epochs per year (time multiple) = 250

1. Calculate effective stake per slot

Effective stake = max ( min ( 1.15*median, actual stake), 0.85*median)

The effective stake of each slot is calculated using the formula above. In epoch-1, you will see that validator Y’s bid is capped down from 2,000 to 1,150; whereas validator Z’s bid is boosted up from 750 to 850.

In epoch-1, if we assume all slots are signing 100% of the blocks, 20% of block rewards will go to Validator X, 23% of block rewards will go to Validator Y and so on.

2. Incorporate signing rate and calculate actual rewards paid per epoch

For this illustration, I made an assumption of validators having a flat signing rate through the epoch. Please note that the actual calculation on the blockchain actually distributes the same block reward among the validators who signed those blocks. This means that blocks signed by less validators will return higher reward per validator. Since I illustrated the calculation over an epoch, I made an assumption of all validators having a particular signing rate per epoch. This will allow me to adjust reward distribution based on signing rate, which is not a real metric the blockchain relies on.

Because of this, my model will also distribute 10 ONEs per epoch regardless of the average signing rate of each validator. However, I will use signing rate to determine the average share of validator’s rewards.

Reward share = signing rate * effective stake distribution

3. Calculate rewards per validator, take epoch snapshot of expected return and annualize

Actual block rewards is distributed among slots based on the normalized reward share calculated in the previous step.

Reward per slot = Normalized reward share * Actual block rewards paid per epoch

Reward per validator = Sum(reward per slot)

Expected return snapshot = Reward per validator / Initial stake 

Expected return snopshot (annualized) = Expected return snapshot * Time multiple

Expected return snapshot shows the actual return rate of a validator in a given epoch. Note that expected return snapshot will be 0% for unelected validators (see validator X in epoch-4 and 5).

4. Take average of expected returns over last 30 epochs

A validator’s average expected return reflects its performance on last 30 epochs or epochs since first staking epoch. In this example, epoch-1 is the first staking epoch.

Average expected return is more robust than expected return snapshot since it aggregates over historical performance.

In this example, you can see Validator X is unelected in epoch-4 and epoch-5 but average expected return doesn’t go down to zero immediately.

Finally, note that data shown on staking dashboard represents the last epoch. For example, Validator Y’s expected return (ER) displayed during epoch-4 will be the average of ERS of the first 3 epoch.