Staking Rewards

Validators who produce a block are rewarded with CTC tokens. Validators may then share these rewards with nominators backing them. Both validators and nominators can stake their tokens on chain and receive staking rewards at the end of each era. The staking system pays out rewards equally to all validators regardless of the total stake backing them. Thus, having more total stake backing a validator does not influence the amount of block rewards that validator receives. This helps to mitigate the risks of validator centralization.

There is a probabilistic component in the distribution of rewards, so they may not be exactly equal for all validators. Additionally, each validator can earn more era points by completing various tasks on-chain. The more era points a validator accumulates, the higher their rewards will be for that era. This helps to incentivize positive validator behaviour on-chain.

Validator Payouts

Validators and nominators are rewarded at the end of each era according to their earned era points. Points are obtained by validators who produce blocks during their designated time. Blocks which end up being finalized and added to the canonical chain score 20 era points. The Creditcoin network also distributes minor rewards to validators who produce uncle blocks, which end up not being included in the canonical chain, and authors that reference previously unreferenced uncle blocks.

An uncle block is a block that is valid in every regard, but which failed to become canonical. This can happen when two or more validators are block producers in a single slot, and the block produced by one validator reaches the next block producer before the others. We call the lagging blocks uncle blocks.

Task

Reward

Produce non-uncle block

20 era points

Reference new uncle block

2 era points

Produce uncle block

1 era points

The Creditcoin blockchain rewards non-uncle block producers with 2 CTC per block. With block time set at 15 seconds, each Era generates and distributes 11520 CTC.

Splitting Rewards among Validators

Assuming all validators are honest and always online when required, block production slots for an era are distributed evenly among them, no matter their total stake. Creditcoin's implementation uses BABE block authoring to blindly assign these slots in a secure way. Ideally, they should all earn a similar amount of era points and thus a similar amount of tokens.

Total stake behind each validator does not affect reward distribution. Assuming there are only 4 active validators in an era, if every validator is online when required, when the era ends each of them should get 2880 CTC (1/4 of the total era reward).

  • Validator #1 with 1M CTC stake: 2880 CTC reward

  • Validator #2 with 500.000 CTC stake: 2880 CTC reward

  • Validator #3 with 25.000 CTC stake: 2880 CTC reward

  • Validator #4 with 100 CTC stake: 2880 CTC reward

Splitting Rewards among Nominators

Once a validator is rewarded CTC, the newly minted tokens are distributed among all of its backers (both the nominators who voted for them, and the validator themselves). Validators can and are encouraged to stake themselves. Rewards are distributed to nominators and validators based on their relative stake amount. Validators are also able to retain a pre-defined percentage of nominator rewards as a commission fee.

Example: A Validator is rewarded 4000 CTC for its contributions to block production. This validator is backed by 1000 CTC staked by four different users:

  • Validator's self-stake: 200 CTC

  • Nominator #1: 400 CTC

  • Nominator #2: 300 CTC

  • Nominator #3: 100 CTC

The validator has set up a 1% commission that is calculated before distributing rewards. After the validator fee, there are 3960 CTC to be distributed among the four accounts.

  • Validator payout: 40 CTC (commission) + 200/1000 * 3960 = 40 + 792 = 832 CTC

  • Nominator #1 payout: 400/1000 * 3960 = 1584 CTC

  • Nominator #2 payout: 300/1000 * 3960 = 1188 CTC

  • Nominator #3 payout: 100/1000 * 3960 = 396 CTC

Testnet Payouts (section does not apply to mainnet)

To support scalability in nominator rewards under Nominated Proof-of-Stake (NPoS), the Testnet payout system has been updated to handle rewards across multiple blocks using a paging mechanism. This allows validators to reward all their nominators in a structured and efficient way.

A new extrinsic, payout_stakers_by_page, has been introduced to enable this behavior. The existing payout_stakers extrinsic continues to function as before, but it now pays out only the unpaid pages in ascending order.

Key Detail: On Testnet only, if a validator has more nominators than the configured staking.maxExposurePageSize (currently set to 64), it will be necessary to call payout_stakers multiple times to reward all nominators. Alternatively, payout_stakers_by_page can be used to target specific pages.

To check the current value of staking.maxExposurePageSize:

  1. Visit the Polkadot/Substrate Portal.

  2. Navigate to Developer > Chain State > Constants.

  3. Select staking > maxExposurePageSize.

Each call to staking.payoutStakers will distribute rewards to the first maxExposurePageSize nominators for that validator.

This update has also led to a reduction in the estimated transaction fees for staking.payoutStakers. For example, the estimated fee may now appear around 277 millictc instead of 2.06 CTC, although the actual fees charged have not changed.

Last updated