Node group consensus
Network nodes can form subsets that implement certain rules. Each group is called a "Consilium" — also the name of a procedure in ancient Rome. Conciliums required a meeting of people familiar with the laws to help make a decision.

Every node of the network can join any Consilium, if it is allowed by the Rules of the respective Consilium. A node that joins a Consilium is called the Validator.

The platform supports an unlimited number of Consiliums and Validators.
The methods for Consilium creation looks like this:
message WitnessGroupDefinition { repeated bytes publicKeys = 1;
bytes groupContractAddress = 2; uint32 groupId = 3;
uint32 quorum = 4;
uint32 minFee = 5;
uint32 contractMultiplier = 6;
repeated bytes delegatesPublicKeys = 7; }
where:
publicKeys – an array of keys that form a group of Validators (Consilium) ; groupName – is the address of the Consilium contract ;
groupId – Consilium index ;
quorum – quorum requirement ;
minFee – the minimum transaction fee. Cannot be less than transactions fee across the system; contractMultiplier – a multiplier that determines
the commission for the execution of the contract;
delegatesPublicKeys – are delegate keys that can determine the decisions of the Consilium.
This method defines two sets of rules:

  1. Consilium evolution rules. How nodes can enter or exit the Consilium and how to change the rules of the Consilium.
  2. Consensus rules of the Consilium. Any consensus model could be chosen inside the Consilium – private , PoW , PoS , delegated PoS, federated, etc... can be arbitrarily determined and modified following the Consilium evolution rules.