The committee scheduler service is responsible for periodically scheduling all committees (validator, compute, key manager) based on epoch-based time and entropy provided by the random beacon.
The service interface definition lives in go/scheduler/api
. It defines the
supported queries and transactions. For more information you can also check out
the consensus service API documentation.
To schedule the validator committee, the committee scheduler selects among
nodes registered with the RoleValidator
role.
Each node's entity must have an escrow account balance meeting the total
thresholds for the nodes and runtimes that it has registered.
If an entity's escrow account balance is too low to meet the total threshold,
the committee scheduler does not consider that entity's nodes.
From these qualifying nodes, the committee scheduler selects at most one node
from each entity, up to a maximum validator committee size.
The maximum validator committee size is configured in the genesis document,
under the path .scheduler.params.max_validators
(consult the genesis
document for details).
Unlike how the committee scheduler schedules other committees, it schedules the
validator committee by choosing nodes from the entities that have the highest
escrow account balances.
When the committee scheduler schedules the validator committee, it additionally assigns each member a voting power, which controls (i) the weight of its votes in the consensus protocol and (ii) how often it serves as the proposer in the consensus protocol.
The committee scheduler assigns a validator's voting power proportional to its entity's escrow account balance.