Skip to content
Global documentation search

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