Consiliums
Network node 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 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:
- Consilium evolution rules. How nodes can enter or exit the Consilium and how to change the rules of the Consilium.
- 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.