Democracy
Overview
On-chain governance is useful for controlling system parameters, authorizing trusted oracles and upgrading the core protocols. The architecture adopted by interBTC is modelled on Polkadot with some significant changes:
- Optimistic Governance
No Council, only public proposals from community
Community can elect a Technical Committee to fast-track proposals
Referenda are Super-Majority Against (Negative Turnout Bias) by default
- Stake-To-Vote (Escrow)
Adopted from Curve’s governance model
Users lock the native governance token
Longer lockups give more voting power
An important distinction is the negative turnout bias (Super-Majority Against) voting threshold. This is best summarized by the Polkadot docs:
A heavy super-majority of nay votes is required to reject at low turnouts, but as turnout increases towards 100%, it becomes a simple majority-carries as below.
Terminology
Proposals are community-supported motions to perform system-level actions.
Referenda are accepted proposals undergoing voting.
Data Model
Constants
MinimumDeposit
The locktime is rounded to weeks to limit checkpoint iteration.
MaxProposals
The maximum number of proposals allowed in the queue.
Scalars
PublicPropCount
Stores the number of public proposals created so far.
PublicProps
Stores an array of the tuple (index, proposal_hash, who).
Maps
DepositOf
Stores the accounts and deposits backing a proposal by prop_index.
External Functions
propose
Create a proposal for some system-level upgrade.
Specification
Function Signature
propose(who, proposal_hash, value)
Parameters
who: The user’s address.proposal_hash: The hash of the proposal preimage.value: The amount of deposit.
Events
Preconditions
The function call MUST be signed by
who.The
amountMUST be greater than the MinimumDeposit.The number of public proposals MUST NOT exceed MaxProposals.
Postconditions
PublicPropCount MUST increase by one.
The deposit MUST be recorded in DepositOf.
A new proposal MUST be appended to PublicProps WHERE:
whois the proposer.proposal_hashis the hash of the proposal.indexis the PublicPropCount before increment.
Events
Proposed
Emit an event if a new proposal was created.
Event Signature
Proposed(proposal_index, deposit)
Parameters
proposal_index: The index of a proposal in the queue.deposit: The initial bond places for deposit.
Functions