Documentation Portal
Project Home
  • Core Documentation
    • Overview
    • Whitepaper
      • Abstract
      • I. Introduction
      • II. Protocol
        • II.I Operation
          • II.I.I Generation of M
          • II.I.II Protocol Fees
          • II.I.III Cancel and Freeze
          • II.I.IV Retrieving Free Collateral
          • II.I.V The Earn Mechanism
          • II.I.VI Removing a Permissioned Actor
          • II.I.VII Example Interactions and Flows
        • II.II Governance Controlled Protocol Actors
        • II.III Governance Controlled Protocol Parameters
      • III. Governance
        • III.I Inputs
        • III.II Operation
          • III.II.I Epochs
          • III.II.II Proposals
            • III.II.II.I Standard Proposals
            • III.II.II.II POWER Threshold Proposals
            • III.II.II.III ZERO Threshold Proposals
            • III.II.II.IV Proposal Matrix
          • III.II.III Checkpoints and Voting
          • III.II.IV Proposing
          • III.II.V Inflation Mechanics
          • III.II.VI Dutch Auction
          • III.II.VII Delegation
          • III.II.VIII ZERO Claiming of Residual Value
        • III.III Governance Controlled TTG Parameters
        • III.IV Immutable TTG Parameters
        • III.V Immutable POWER Parameters
        • III.VI Immutable ZERO Parameters
      • IV. The M0 Economy
        • IV.I Minters
        • IV.II Validators
        • IV.III Earners
      • V. Off-Chain Ecosystem
        • V.I Guidance
        • V.II Off-Chain Actors and Components
    • Adopted Guidance
      • Adopted Guidance v1.30
        • 1. Description of the Adopted Guidance
          • 1.1. Purpose of the Adopted Guidance
          • 1.2. Change Process for the Adopted Guidance
        • 2. Ecosystem Description
          • 2.1. Actors
          • 2.2. Mandatory Contracts
          • 2.3. Duty of Transparency
          • 2.4. Core Operational Flows
            • 2.4.1. Update Collateral Process
            • 2.4.2. Minting M
            • 2.4.3. Retrieval of Collateral
          • 2.5. High-Risk Jurisdictions
        • 3. Eligible Collateral
          • 3.1. Criteria for Eligible Collateral
          • 3.2. Valuation Policy for Eligible Collateral
          • 3.3. Collateral Storage
          • 3.4. Approved Jurisdictions
            • 3.4.1. Bankruptcy Remoteness
            • 3.4.2. Non-Petition and Non-Seizure Provisions
            • 3.4.3. Priority of Payments and Subordination
            • 3.4.4. Regulatory Compliance
            • 3.4.5. Legal and Regulatory Framework
            • 3.4.6. Political Stability
            • 3.4.7. Dispute Resolution
            • 3.4.8. Asset Segregation
            • 3.4.9. Limited Recourse
            • 3.4.10. Investor Protection
            • 3.4.11. Operational Infrastructure
            • 3.4.12. Custody Relationship
            • 3.4.13. Audit
        • 4. SPV Operators
          • 4.1. Contact Information of Currently Approved SPV Operators
          • 4.2. Eligibility Criteria for Approved SPV Operators
          • 4.3. Obligations of SPV Operators
            • 4.3.1. Obligations in the Normal Course of Business
            • 4.3.2. Obligations Outside of the Normal Course of Business
              • 4.3.2.1. Amicable Wind Down Process
              • 4.3.2.2. Non-Amicable Wind Down Process
              • 4.3.2.3. Minter Insolvency
              • 4.3.2.4. Unauthorized Termination of Minter – SPV Operator Agreement
            • 4.3.3. Operational Obligations of SPV Operators
              • 4.3.3.1. Co-signature of the SPV for significant payments
              • 4.3.3.2. Cooperation with Validators
              • 4.3.3.3. Maintenance of Administrative Buffer
              • 4.3.3.4. No Wire Back Instructions
          • 4.4. Guidelines for Submission of Approval Requests
        • 5. Validators
          • 5.1. Contact Information of Currently Permissioned Validators
          • 5.2. Eligibility Criteria for Permissioned Validators
          • 5.3. Obligations of Validators
          • 5.4. Guidelines for Submission of Permissioning Requests
        • 6. BD Minters and Minters
          • 6.1. Contact Information of Currently Permissioned Minters
          • 6.2. Eligibility Criteria for Permissioned Minters
          • 6.3. Obligations of Minters
          • 6.4. BD Minter and Minter Compliance Requirements
          • 6.5. Guidelines for Submission of Permissioning Requests
        • Adopted Guidance PDF Version
      • Adopted Guidance v1.20 (deprecated)
        • Adopted Guidance PDF Version
    • Glossary
    • Disclosures
    • Whitepaper PDF Version
  • Technical Documentation
    • Protocol Technical Specification
      • Main Invariants
      • Variables
        • Protocol Variables Controlled by TTG
        • Protocol Variables And Definitions
        • Protocol Variables Used For Interest Accruals
      • Protocol And M Token Actors And Actions
        • Protocol Core Functions
          • Minter Gateway
            • updateCollateral
            • proposeMint
            • mintM
            • cancelMint
            • freezeMinter
            • burnM
            • proposeRetrieval
            • activateMinter
            • deactivateMinter
          • M Token
            • startEarning
            • stopEarning
            • transfer
          • Interest Calculations And Indices
            • MinterGateway.updateIndex
            • MinterGateway.currentIndex
            • MToken.updateIndex
            • MToken.currentIndex
            • activeOwedM
          • Interest Rate Models
            • Stable Earner Interest Rate Model Contract
            • Minter Interest Rate Model Contract
    • TTG Technical Specification
      • Main Invariants
      • Core Architecture
        • 1. Registrar
          • Registrar Variables and Getters
          • Registrar Core Functions
        • 2. TTG Governors
          • Matrix Of TTG Proposals
          • 2.1 Standard Governor
            • Variables And Getters
            • Governor Proposal State Transitions
            • Core Functions
            • Core Governance Proposals
          • 2.2 Emergency Governor
            • Emergency Governor Variables And Getters
            • Governor Proposal State Transitions
            • Core functions
              • propose(targets[], values[], callDatas[], description): proposalId
              • castVote(proposalId, support): weight
              • castVotes(proposalIds[], supports): weight
              • execute(targets[], values[], callDatas[], description): proposalId
              • setThresholdRatio(newThresholdRatio)
              • getProposal(proposalId)
              • state(proposalId)
            • Core Governance Proposals
          • 2.3 ZERO Governor
            • Variables And Getters
            • Core Functions
            • Core Governance Proposals
        • 3. POWER Token
          • Variables And Getters
          • POWER Token Core Functions
        • 4. ZERO Token
          • ZERO Token Core Functions
        • 5. Distribution Vault
          • Variables And Getters
          • Core Functions
    • Source Code Reference
      • Protocol
        • Protocol Contracts
          • Core Protocol Contracts
            • MToken
            • MinterGateway
          • Abstract Protocol Contracts
            • ContinuousIndexing
          • Protocol Interfaces
            • IContinuousIndexing
            • IMToken
            • IMinterGateway
            • IRateModel
            • ITTGRegistrar
          • Libs
            • ContinuousIndexingMath
            • TTGRegistrarReader
          • Rate Models
            • Contracts
              • EarnerRateModel
              • MinterRateModel
            • Interfaces
              • IEarnerRateModel
              • IMinterRateModel
      • TTG
        • TTG Contracts
          • Core TTG Contracts
            • DistributionVault
            • Registrar
            • Governors
              • EmergencyGovernor
              • StandardGovernor
              • ZeroGovernor
            • Tokens
              • PowerBootstrapToken
              • PowerToken
              • ZeroToken
          • Abstract TTG Contracts
            • ERC5805
            • Governors
              • BatchGovernor
              • ThresholdGovernor
            • Tokens
              • EpochBasedInflationaryVoteToken
              • EpochBasedVoteToken
            • Interfaces
              • IBatchGovernor
              • IERC5805
              • IERC6372
              • IEpochBasedInflationaryVoteToken
              • IEpochBasedVoteToken
              • IGovernor
              • IThresholdGovernor
          • Deployers
            • EmergencyGovernorDeployer
            • PowerTokenDeployer
            • StandardGovernorDeployer
          • TTG Interfaces
            • IDistributionVault
            • IRegistrar
            • Deployers
              • IDeployer
              • IEmergencyGovernorDeployer
              • IPowerTokenDeployer
              • IStandardGovernorDeployer
            • Governors
              • IEmergencyGovernor
              • IStandardGovernor
              • IZeroGovernor
            • Tokens
              • IPowerBootstrapToken
              • IPowerToken
              • IZeroToken
          • Libs
            • PureEpochs
      • Common
        • Contracts
          • Main
            • ContractHelper
            • ERC20Extended
            • ERC3009
            • ERC712Extended
            • StatefulERC712
          • Interfaces
            • IERC1271
            • IERC20
            • IERC20Extended
            • IERC3009
            • IERC712
            • IERC712Extended
            • IStatefulERC712
          • Libs
            • SignatureChecker
            • UIntMath
    • 🏁Audits
    • 🔛Deployments
Powered by GitBook

M0 Project

  • Home
  • Research

Legal

  • Terms & Conditions
  • Privacy Policy

Copyright 2025 M0 Foundation

On this page
  • State Variables
  • _MIN_THRESHOLD_RATIO
  • ONE
  • thresholdRatio
  • Functions
  • constructor
  • execute
  • propose
  • COUNTING_MODE
  • getProposal
  • proposalQuorum
  • quorum
  • quorumNumerator
  • quorumDenominator
  • state
  • _createProposal
  • _setThresholdRatio
  • _getQuorum
  • _votingDelay
  • _votingPeriod
  1. Technical Documentation
  2. Source Code Reference
  3. TTG
  4. TTG Contracts
  5. Abstract TTG Contracts
  6. Governors

ThresholdGovernor

PreviousBatchGovernorNextTokens

Inherits: IThresholdGovernor, BatchGovernor

Author: M^0 Labs

State Variables

_MIN_THRESHOLD_RATIO

The minimum allowed threshold ratio.

uint16 internal constant _MIN_THRESHOLD_RATIO = 271;

ONE

Returns the value used as 100%, to be used to correctly ascertain the threshold ratio.

uint256 public constant ONE = 10_000;

thresholdRatio

Returns the threshold ratio to be applied to determine the success threshold for a proposal.

For all intents and purposes, this is the same as quorumNumerator.

uint16 public thresholdRatio;

Functions

constructor

Construct a new ThresholdGovernor contract.

constructor(string memory name_, address voteToken_, uint16 thresholdRatio_) BatchGovernor(name_, voteToken_);

Parameters

Name
Type
Description

name_

string

The name of the contract. Used to compute EIP712 domain separator.

voteToken_

address

The address of the token used to vote.

thresholdRatio_

uint16

The ratio of yes votes votes required for a proposal to meet quorum and succeed.

execute

Allows the caller to execute a proposal.

function execute(address[] memory targets_, uint256[] memory values_, bytes[] memory callDatas_, bytes32)
    external
    payable
    returns (uint256 proposalId_);

Parameters

Name
Type
Description

targets_

address[]

values_

uint256[]

callDatas_

bytes[]

<none>

bytes32

Returns

Name
Type
Description

proposalId_

uint256

proposalId The unique identifier for the proposal.

propose

Allows the caller to create a proposal.

function propose(
    address[] memory targets_,
    uint256[] memory values_,
    bytes[] memory callDatas_,
    string memory description_
) external returns (uint256 proposalId_);

Parameters

Name
Type
Description

targets_

address[]

values_

uint256[]

callDatas_

bytes[]

description_

string

Returns

Name
Type
Description

proposalId_

uint256

proposalId The unique identifier for the proposal.

COUNTING_MODE

module:voting

A description of the possible "support" values for castVote and the way these votes are counted, meant to be consumed by UIs to show correct vote options and interpret the results. The string is a URL-encoded sequence of key-value pairs that each describe one aspect, for example support=for,against&quorum=for. The string can be decoded by the standard URLSearchParams JavaScript class.

function COUNTING_MODE() external pure returns (string memory);

getProposal

Returns all data of a proposal with identifier proposalId.

function getProposal(uint256 proposalId_)
    external
    view
    returns (
        uint48 voteStart_,
        uint48 voteEnd_,
        ProposalState state_,
        uint256 noVotes_,
        uint256 yesVotes_,
        address proposer_,
        uint256 quorum_,
        uint16 quorumNumerator_
    );

Parameters

Name
Type
Description

proposalId_

uint256

Returns

Name
Type
Description

voteStart_

uint48

voteStart The first clock value when voting on the proposal is allowed.

voteEnd_

uint48

voteEnd The last clock value when voting on the proposal is allowed.

state_

ProposalState

state The state of the proposal.

noVotes_

uint256

noVotes The amount of votes cast against the proposal.

yesVotes_

uint256

yesVotes The amount of votes cast for the proposal.

proposer_

address

proposer The address of the account that created the proposal.

quorum_

uint256

quorum The threshold/quorum of yes votes required for the proposal to succeed.

quorumNumerator_

uint16

quorumNumerator The threshold/quorum numerator used to calculate the quorum.

proposalQuorum

Returns the quorum of yes votes needed for a specific proposal to succeed.

function proposalQuorum(uint256 proposalId) external view returns (uint256);

Parameters

Name
Type
Description

proposalId

uint256

The unique identifier for the proposal.

Returns

Name
Type
Description

<none>

uint256

The quorum of yes votes needed for the proposal to succeed.

quorum

Returns the minimum number of eligible (COUNTING_MODE) votes for a proposal to succeed.

function quorum() external view returns (uint256);

quorumNumerator

Returns the quorum numerator used to determine the quorum for a proposal.

For all intents and purposes, this is the same as thresholdRatio.

function quorumNumerator() external view returns (uint256);

quorumDenominator

Returns the quorum denominator used to determine the quorum for a proposal.

function quorumDenominator() external pure returns (uint256);

state

Returns the state of a proposal with identifier proposalId.

function state(uint256 proposalId_) public view override(BatchGovernor, IGovernor) returns (ProposalState state_);

Parameters

Name
Type
Description

proposalId_

uint256

Returns

Name
Type
Description

state_

ProposalState

The state of the proposal.

_createProposal

Creates a new proposal with the given parameters.

function _createProposal(uint256 proposalId_, uint16 voteStart_) internal override;

Parameters

Name
Type
Description

proposalId_

uint256

The unique identifier of the proposal.

voteStart_

uint16

The epoch at which the proposal will start collecting votes.

_setThresholdRatio

Set the threshold ratio to be applied to determine the threshold/quorum for a proposal.

function _setThresholdRatio(uint16 newThresholdRatio_) internal;

Parameters

Name
Type
Description

newThresholdRatio_

uint16

The new threshold ratio.

_getQuorum

Returns the quorum given a snapshot and quorum numerator.

function _getQuorum(uint16 voteStart_, uint16 quorumNumerator_) internal view returns (uint256 quorum_);

Parameters

Name
Type
Description

voteStart_

uint16

The epoch at which the proposal will start collecting votes.

quorumNumerator_

uint16

The quorum numerator.

Returns

Name
Type
Description

quorum_

uint256

The quorum of yes voted needed for a successful proposal.

_votingDelay

Returns the number of clock values that must elapse before voting begins for a newly created proposal.

function _votingDelay() internal pure override returns (uint16);

Returns

Name
Type
Description

<none>

uint16

The voting delay.

_votingPeriod

Returns the number of clock values between the vote start and vote end.

function _votingPeriod() internal pure override returns (uint16);

Returns

Name
Type
Description

<none>

uint16

The voting period.

Git Source