DS committee ejection has now been superseded by DS Reputation.

DS committee membership is maintained using a multiple-in multiple-out (MIMO) setup. This setup allows n nodes to join and leave the DS committee at every DS epoch. The steps are:

  1. Nodes submit PoWs (for difficulty and DS difficulty)
  2. DS leader composes DS Block
    • DS leader determines how many nodes to elect into DS committee by using min(number of eligible pow submission, NUM_DS_ELECTION)
    • Hence, number of incoming DS nodes ranges from 0 to NUM_DS_ELECTION
  3. DS leader adds incoming DS members' information to the map inside DS Block
  4. DS leader removes incoming DS members from sortedPoWSolns to ensure the incoming DS members do not get added into any of the shards
  5. After composing DS Block, ComputeDSBlockParameters() returns the number of incoming DS members (to be used a later step)
  6. Now, it is time to eject n number of (oldest) DS members from the DS committee and downgrade these to shard members
  7. DS leader adds the ejected members into m_allPoWConns and sortedPoWSolns
    • As downgraded members do not perform PoWs, dummy PoW solutions are given to these
    • Dummy PoW solution in this case is calculated using sha256(node’s pubkey)
  8. Now, it is time to compose the sharding structure. There is no major change to this portion
  9. DS Block consensus begins and is successfully completed
  10. DS leader and backups do the following
    • DS leader and backups run UpdateDSCommitteeComposition() first before doing UpdateMyDSModeAndConsensusId(). This is to be consistent with what the incoming members will do. Also, having such changes enable much easier calculation of consensusMyID
    • Add n number of incoming DS members inside the DS committee data structure in mediator
    • Pop n number of DS members from the DS committee data structure in mediator
    • The oldest n members are decided by (consensusID + n incoming DS members) >= size of DS committee. These nodes change their mode to IDLE
    • Other DS members increment their consensusMyID by n and update the status to either DS leader or backup
  11. DS committee sends the DS Block and sharding structure to all PoW submitters
  12. Incoming DS members receive the DS Block, process it, and update their DS consensusMyID based on the ordering found in the map in the DS Block. From here onwards, these nodes are part of the DS committee
  13. Shard members process the DS Block and update their view of the DS committee