# Decracy Democracy Module
Decracy represents democracy at its purest form, with the goal every human to have a single vote in the system.
Since the inception of the decentralized systems, the major bottleneck was always the governance of it. A lot of projects tried to solve it via masternodes or validators, with proof of work or proof of stake, or even with on-chain voting, with less or no true success.
Almost every solution has its flaws and most specifically the problem to identify if each node represents a single voter or a voter or a group of voters with a lot of resources can take advantage of the system and enforce a silent coup. Democracy in a decentralized system can only be achieved if the system is fair to everyone and makes sure that each node/validator represents a single human.
Decracy with the usage of X-ID validators solves that issue as a voter will always represent a single human being. X-ID validators are required to attach their biometrical data with the X-ID validator address to acquire a digital identity within the system. Users can participate in the network without that requirement but are only watchers of the system while all X-ID validated users are validating the network.
### Democracy User Structure
#### The Watchers
Watchers are the simplest nodes that exist in the system and can be spawn by anyone and participate in the network with no other requirement than running the node software. As the name suggests they are only available to watch the chain and sync with the network, they are also able to help other "watchers" to sync up to the latest event block of the chain.
Watchers also batch the chain on each checkpoint so they can keep the data fingerprint minimal(light client). This gives them the advantage of being very light for the underlying system, as mobile devices and so on.
#### The Stakers
Stakers are nodes that hold collateral to validate a part of the event blocks. The stakers need to be almost all the time online serving the network and proving that they hold the collateral locked to be considered for validation and rewards.
#### The X-ID Validators
X-ID validators are nodes that contain in an encrypted form the biometrics of each user, one human one node, and are responsible for the event block validation. They don't need to hold collateral and get rewarded for the validation of each event block.
### The Rules In Democracy
While trying to preserve a truly democratic vision we have also to consider that one of the most fundamental ideas in a democracy is that humans are responsible for their actions. The same thing applies to Decracy as each node has a reputation system that goes along with it.
Misbehavior or absence of a role execution will eventually lead to penalization of the user according to the severity of the action.
If users/nodes take a responsibility in the network as X-ID or staked validators, they need to be present to 95% of the event blocks in each epoch of the chain as a fundamental rule. Lazy validators are slashed on rewards and reputation as this is also taken as a penalized action.
### Modules
#### Voting
Voting takes place in Decracy among the X-ID validators and only them.
X-ID users can make proposals in the system and get voting on them.
Proposals are only made from validators that have a clean reputation and are part of the system for a maturity time.
Proposals have a lifetime period in event blocks that remain active and collect votes. A decision depending on the votes is taken with the due of the lifetime of the proposal.
Each X-ID validator has a cool down period after a proposal.
The cool down period is a 30 days silence of proposals to avoid the spam and misuse of the system. That will also encourage the proper usage of the system so it can be defended against crowd noise spam.
```rust
/// Decision represents the type of decisions available for
/// a proposal
pub enum Decision {
/// Accepted represents a accepted decision on the system
Accepted,
/// Rejected represents a rejected desicion on the system
Rejected,
/// Tie represents a tied proposal on the system
Tie,
/// Pending represents a pending proposal on the system
Pending,
}
/// Proposal represents the structure of a proposal in the system
pub struct Proposal {
/// sig represents a signature of the peer_id, public_key of the node
/// that made the proposal and data of the proposal
sig: Signature,
/// start event_blocknumber represents the event block number that
/// the proposal was presented to the system
start_event_blocknumber: u128,
/// end event_blocknumber represents the event block number that
/// the proposal will expire and voting will conclude
end_event_blocknumber: u128,
/// data represents the data of the proposal in encoded bytes
data: Vec<u8>,
/// vote_collection represents the collections of the votes
/// for this proposal
vote_collction: Vec<Vote>,
/// decision represents the final decision of the proposal
decision: Decision,
}
/// Democracy represents the structure that holds info
/// about the state of the system
pub struct Democracy {
/// in_cooldown represents the a collection of the current
/// x-id validators that are in cooldown mode and unable to propose
in_cooldown: Vec<XID>,
/// current_proposals holds the current proposals
/// that are active for voting
current_proposals: Vec<Proposal>,
/// accepted_proposals holds the records for all accepted
/// proposals by the system
accepted_proposals: Vec<Proposal>,
}
```