Skip to content

Latest commit

 

History

History
368 lines (279 loc) · 8.37 KB

fip-8.md

File metadata and controls

368 lines (279 loc) · 8.37 KB

FIP8: Adjusting Block Rewards by the Validator's Stake

Problem

The current consensus mechanism has one important constraint:

Validators cannot stake more than a minimum value of 100K Fuse. Virtually, both the minimum stake and maximum stake are 100K. While even if they could stake more, this wouldn't increase their reward.

This introduces a number of disadvantages:

  • Validators have to own multiple validator accounts and run multiple nodes to stake more than the maximum amount for account.
  • While the delegation mechanism is already enabled the maximum stake of 100K makes it a inefficient. Validators have no incentive to open delegation.

Goals

The goals of this FIP are:

(a) Allowing for validators to stake more than the mimimum stake amount

(b) introducing a new block reward function, so validators will receive block rewards in accordance to their stake.

Block reward function

Why is a new block reward function required?

By Aura consensus which we are using, all validators get to validate the same amount of blocks, and receive the same block reward. So all validators, without considering their stake expected to receive the same rewards. The block reward function is needed to take validator’s stake into account, so the validators would lower the number of the nodes they are running.

Another important property of Aura consensus, is that the time is partitioned into time slots that are divided between the validators, when each validator is allowed to validate only his time slots.

What happens when the validator misses blocks?

When the validator misses his time slot to validate the block, no block is generated and hence no block reward is sent. Then the new time slots starts and the next validator is allowed to create his block in the new time slot. Meaning that, missing blocks not affect the reward of other validators, and reducing the inflation because less block rewards are generated.

Block reward formula

The new block reward formula should have the following properties:

  1. Do not change the inflation of the token over time.
  2. Splitting or combining the validator’s stake to multiple accounts should not affect the validator's reward over time. Meaning that a validator with the total stake of 1M can run one machine with 1M staked, two machines with 500K on each, or 10 machines with 100K. All these options should give to the validator the same block reward.

I suggest the following formula for Ra, the block reward of validator A:

Ra = (Sa / S) * n * R

Where:

_Sa - the stake of validator A_


_S - total stake of current validators_


_n - number of validators_


_R - current reward with adjustment to the inflation planed_

Meaning that the new block reward will be proportional to the ratio of validator’s stake. We will see in a while why multiplying by the number of validators is needed.

Examples

Let’s look at a simple example of two validators A and B, with the stake of 100K and1M.

We are going to inspect a certain amount of time that ‘s sufficient to validate 100 blocks. With the current block time of time seconds it is 500s, but every time period can be used.

Without the proposal

Validator Stake # of nodes Blocks validated Reward per block Validator’s reward
A 100K 1 10 (=Ba) R 10R (=Va)
B 900K 9 90 (=Bb) R 90R (=Rb)
Total 1M 10 100 X (Average) 100R

Va = 100 /

Validator reward is number of blocks A validated multiply the block reward

Va = Ba * R = 10R

vb = Bb * R = 90R

With the proposal

Validator B can combine his 9 accounts into one

Validator Stake # of nodes Block validated Reward per block Validator’s reward
A 100K 1 50 0.2R (=Ra) 10R (=Va)
B 900K 1 50 1.8R (=Rb) 90R (=Vb)
Total 1M 10 100 R 100R

Using the new formula, the reward should be:

Ra = (Sa / S) * n * R

Ra = (100k / 1rM) * 2 * R= 0.2R

Rb = (900k / 1M) * 2 * R= 1.8R

Va = 50 * 0.2R = 10R ✅

Vb = 50 * 1.8R = 90R ✅

We can see that the Validator reward over time didn’t change, fulfilling (1) property of the formula.

Now, Assuming that B wants to split his stake to 3 nodes

Validator Stake # of nodes Block validated Reward per block Validator’s reward
A 100K 1 25 0.2R (=Ra) 10R (=Va)
B1 500K 1 25 2R (=Rb1) 50R (=Vb1)
B2 200K 1 25 0.8R (=Rb2) 20R (=Vb2)
B3 200K 1 25 0.8R (=Rb3) 20R (=Vb3)
Total 1M 10 100 R 100X

Ra = (100k / 1M) * 4 * R= 0.4R

Rb1 = (500k / 1M) * 4 * R= 2R

Rb2 = (200k / 1M) * 4 * R= 0.8R

Rb3 = (200k / 1M) * 4 * R= 0.8R

Va = 25 * 0.4R = 10R ✅

Vb1 = 25 * 2R = 50R

Vb2 = 25 * 0.8R = 20R

Vb3 = 25 * 0.8R = 20R

Vb = Vb1 + Vb2 + Vb3 = 90R ✅

We can see that splitting the funds for Validator B, didn’t change his reward over time, fulfilling (2) property of the formula

Calculating the validator stake and total stake

Validator's stake and the total stake for the formula should be calculated on start of every cycle, locking the validator block rewards per cycle. Otherwise the validators could manipulate the block reward by transfering and staking Fuse tokens between the multiple validator accounts.

Math Proof

Work in Progress 🏗👷‍♂️

Futher Development

FIP8 introduces principal changes to the consesnsus mechanism, therefore it got implications to other parts of the network as well. We would like to list the implications here, and we expect to solve or address them in the following FIP's.

Governance

Governance is an integral part of the network. With the current voting mechanism, the validator’s votes are equal as all validator accounts have the same amount of tokens staked.

We propose that the weight of validator’s vote, going to be proportional to the amount of tokens staked. Getting back to example 1: validator A with 100K fuse is going to have 1 vote, while validator B with 900K will have 9 votes.

Locking period for staking

It makes sense to disallow for the current validators to withdraw their stake. Allowing them to do so only when they leave the validator set or performing both of the actions together.

Minimum delegation fee

We are also considering to introduce the minimum delegation fee for validators. So big players couldn't take control over the network by introducing zero fees.

Pros and Cons

Pros

  • One validator account and one node per validator
  • Delegation becomes a simple and open market. Giving revenues both to validators and the delegators as well

Cons

  • While the block reward is generated per stake, the validation fees are per block. Meaning that splitting validator accounts, the validator will receive more fees.
  • When all validators have the same amount of blocks to validate, malfunctioning of small validators have the same implications as of the large ones. That got certain implications to stability of the network, opening new attack vector. Increasing the minimum stake amount