Infoblocks
How the reward mechanism works in the Cardano blockchain and how it differs from other public blockchains
avatar

posted on Dec. 11, 2020

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.

Rewards per block produced.

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 (1) the amount of participation of the stake pool and (2) its performance.

Rewards and staking

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 stake 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.

43588b48a439eca52f6e7b53922a25cf

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.

280f86252836b52cd75310b157923f0c

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.

fcddd09f450f0c5202e26d4ef4cef49f

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.2% of the total, equivalent to about 64 million ADA. Through this parameter, we limit the amount of stake considered in the calculation of rewards up to a maximum of 0.2% of total ADA. We will put a line ( σ’ instead of σ) to denote that participation will be capped by the saturation point z_0.

516e74faaf8b7b37bbafb2cb10d5d506

In our previous example, a stake pool would be limited to receive a maximum of f(s, σ) = 200000 * 0.002 = 400. 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).

060fa1dacf5513e59895498cea29ff57

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.

26917be33bcf208ec88968255424cac7

Note that if the pledge influence factor is zero, i.e., a_0 = 0, we have again the reduced form R * σ’.

Performance factor

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 chains. In the long run, the reward is proportional to the stake controlled by the stake pool.

See you next epoch!

calculo-das-recompensas_header-EN.png