How are the stake pool rewards calculated?

If you have checked our infoblock about the
history of rewards, you already know how the pot is composed and what are the sources of
rewards distributed to operators. We can conclude that the incentive mechanism
is the main engine of the public blockchains, because it is through it that operators are
rewarded for the service and encouraged to act in favor of the protocol. Networks such as Bitcoin, Ethereum, Tron and
Tezos pay a fixed reward per block produced, which leads the most curious to wonder how
much reward Cardano pays per block. In the Cardano blockchain, the reward mechanism
is one of the most important security components of the Ouroboros protocol, developed through
extensive scientific research to ensure that the mechanism leads to a decentralization
of the network in the long term.

One of the differences compared to other blockchains
mechanisms is that the reward distribution is not fixed per block. Instead, the rewards distributed to stake
pools and their delegators involve the amount of participation of the stake pool and its
performance. To understand the reward mechanism, we can
take a look in detail at the components that are used in calculation and how each one influences
the rewards.

We will first consider how the reward of the
stake pool is calculated as a function of participation and then how performance weights
the final value of rewards. Let's imagine that f is a function that calculates
the rewards of each entity in the network based on two factors of the stake pool: s,
the stake pool's pledge; and σ, the total stake of the stake pool. Both values are relative to the total of ADA
in circulation, meaning they represent a fraction (or percentage) of the amount the stake pool
controls of existing coins.

The fraction referring to the pledge, which
we are calling s, represents the stake delegated by the pool operators themselves, while σ
represents the total stake, including the pledge and the stake of delegators. If there were only one stake pool, we could
distribute the entire R rewards pot to this one, regardless of other factors. Let's assume that this pot contains a total
of 200 thousand ADA. To divide the pot in proportion to the relative
stake of each entity, we need to consider the parameter σ multiplying the total rewards
in the pot. Thus, ignoring the pledge for now, if a stake
pool holds 1% of all circulating ADA (σ = 0.01), it would receive 1% of the pot. In other words, f(s, σ) = 200000 * 0.01 = 2000. The problem that emerges from associating
the rewards in a directly proportional way is that stake pools with higher stakes always
receive most of the rewards, becoming larger and possibly centralizing the network through
huge entities. To control the growth of the rewards of a
single stake pool, in the Cardano blockchain there is the concept of saturation point that
limits the rewards gain. We will call it z_0, also representing a value
relative to the total of coins in circulation.

Currently, the saturation point corresponds
to approximately 0.667% of the total, equivalent to about 212 million ADA. Through this parameter, we limit the amount
of stake considered in the calculation of rewards up to a maximum of 0.667% of total
ADA. We will put a line (σ' instead of σ) to
denote that participation will be capped by the saturation point z_0. In our previous example, a stake pool would
be limited to receive a maximum of f(s, σ) = 200000 * 0.00667 = 1334. However, we are not yet considering how the
pledge influences the calculation of rewards. The purpose of the pledge is to protect the
network from a Sybil attack, providing higher rewards for operators who commit and delegate
their own funds to the stake pool and discouraging the creation of several pools with a low stake.

The Ouroboros protocol implements the a_0
parameter as the influence factor of the pledge, currently set to a_0 = 0.3. Let's skip the saturation point, for now,
to try to keep it simple by writing the reward calculation function including the pledge
influence factor (a_0) and the stake pool pledge (s). The last changes we need to make to the formula
are related to the saturation point z_0, which also needs to be included in the calculation. We limit the pledge to the saturation point
in the same way we did with total stake, denoting this capped value by s' instead of s, multiplying
one more term to finally get to the final form of the reward function.

Note that if the pledge influence factor is
zero, i.e., a_0 = 0, we have again the reduced form R * σ'. Since the rewards of a stake pool are calculated
with the function described, the value obtained is adjusted by a performance factor that weights
the rewards in relation to the number of blocks produced. This factor is calculated by β/σ, in which
β is the fraction of blocks produced by the pool in an epoch, representing a fraction
in the form of blocks produced / 21600; σ is, again, the fraction of relative stake
controlled by the pool. Note that β and σ are fractions that must
obtain the same value over time, so that the fraction of blocks generated is proportional
to the controlled stake. Since the drawing of slots to define the entities
that will produce blocks works like a lottery, sometimes a pool can produce more or less
blocks than expected, but on average the performance factor should be equal to 1 for pools with
ideal performance.

In short: There is a difference in the reward
for generating more or less blocks, but there is no fixed value of rewards as in other networks. In the long run, the reward is proportional
to the stake controlled by the stake pool. See you next epoch!.

You May Also Like