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

Governance Architecture

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.

\[\frac{\text{against}}{\sqrt{\text{electorate}}} < \frac{\text{approve}}{\sqrt{\text{turnout}}}\]

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 amount MUST be greater than the MinimumDeposit.

  • The number of public proposals MUST NOT exceed MaxProposals.

Postconditions

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