Elections Example

The validator election process is an iterative process. This examples covers a full election where 5 validators compete for 3 slots in the active set while 5 nominators vote for them.

Consider the following initial setup:

Nominator

Stake

Nominations

One

100 CTC

Alice & Bob

Two

200 CTC

Alice & Bob

Three

300 CTC

Alice

Four

400 CTC

Bob, Charlie & Dave

Five

500 CTC

Alice & Dave

Validator

Nominations (count)

Alice

4

Bob

3

Charlie

1

Dave

2

Eve

0

  1. First, we must calculate the approval stake of each validator; this is the total support for them by all nominators.

Validator

Total

Detail

Alice

1100 CTC

100 + 200 + 300 + 500

Bob

700 CTC

100 + 200 + 400

Charlie

400 CTC

400

Dave

900 CTC

400 + 500

Eve

0 CTC

0

  1. We remove any validators which do not have any support from nominators. Eve will never be elected, so we remove it from the set.

  2. After this, we can calculate the initial scores for each candidate. In each round, the validator with the lowest score gets assigned a slot. This is calculated by the formula 1 / stake

Validator

Stake

Score

Alice

1100 CTC

1 / 1100 = 0.00091

Bob

700 CTC

1 / 700 = 0.00143

Charlie

400 CTC

1 / 400 = 0.0025

Dave

900 CTC

1 / 900 = 0.0011

  1. The candidate with the lowest score is Alice. It has its slot reserved. After the first round, the weights of each nominator votes get updated to Alice being already elected. This makes the votes of those who picked Alice stronger. The formula is the following:

    candidate_score = candidate_score + ((voter_budget * voter_load) / candidate_approval_stake)
  2. After updating the weights, we recalculate the scores for each validator:

Validator

Score

Bob

0.00182

Charlie

0.0025

Dave

0.00162

  1. Validator Dave gets the next available slot and we update the nominator weights and validator scores again.

Validator

Score

Bob

0.00143

Charlie

0.0025

  1. We end up with Bob taking the last slot. All 3 slots are filled and we have the election result

Last updated