Encointer Democracy Specification III
TL;DR
- We allow an infinite amount of proposals.
- A proposal will be enacted if it is in confirmed state for long enough.
- On enactment of a proposal, all proposals of the same type get cancelled.
Overview
Proposal Submission
- Everyone can submit a proposal
- There can be an infinite amount of proposals
Voting
- On every vote, we update the proposal state (Algorithm 1):
- check if proposal is ongoing(since) < cancel date
- if yes: cancel, return
- if no: do nothing
- check if proposal is older than lifetime
- if yes: cancel, return
- else: do nothing
- check if passing
- if yes: check if already confirming
- if yes: check if it is confirming for > confirmation period
- if yes: change state to approved
- if no: no nothing
- if no: change state to confirming with the current block number
- if no: check if already confirming:
- if yes: change to not confirming
- if no: do nothing
Adaptive Quorum Biasing
- We dont use curves on turnout and approval like Substrate.
- In order to determine if a proposal is passing, we use AQB.
- The exact parameters are TBD and could even vary for different proposal types.
Proposal Cancelling
- If one proposal is approved, we cancel all ongoing proposals of the same type
- We cannot loop over all proposals for performance reasons so:
- keep datastructure ProposalAction -> cancelDate
- when trying to accept check if
- ongoing(since) < cancelDate
- if true: cancel
- else enact
- on approval update cancel date to current block
Enactment
- There is an enactment extrinsic which will enact a approved proposal if approved(since) >= cancelDate
Additional Extrinsics
update_proposal_state(proposalId)
extrinsic in order to run Algorithm 1 in case if there is no more incoming vote but the proposal state should be updated.
cleanup(proposalId)
deletes a proposal if it is ongoing since < cancelDate
Naming issues
- cancelDate should be cancelBlockNumber or cancelledAt?
Open Questions
- Can we enact in the voting call?
- Fee fairness?
- Some proposals caan only be encated at certain times?