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
  • Functions
  • castVotes
  • castVotesBySig
  • castVotesBySig
  • castVotesWithReason
  • castVotesWithReasonBySig
  • castVotesWithReasonBySig
  • getBallotDigest
  • getBallotsDigest
  • getBallotWithReasonDigest
  • getBallotsWithReasonDigest
  • hashProposal
  • voteToken
  • BALLOTS_TYPEHASH
  • BALLOTS_WITH_REASON_TYPEHASH
  • Errors
  • AlreadyVoted
  • ArrayLengthMismatch
  • EmptyProposalIdsArray
  • ExecutionFailed
  • InvalidCallData
  • InvalidCallDatasLength
  • InvalidTarget
  • InvalidTargetsLength
  • InvalidValue
  • InvalidValuesLength
  • InvalidVoteStart
  • InvalidVoteTokenAddress
  • NotSelf
  • ProposalCannotBeExecuted
  • ProposalDoesNotExist
  • ProposalExists
  • ProposalInactive
  • ZeroVotingPower
  • Enums
  • VoteType
  1. Technical Documentation
  2. Source Code Reference
  3. TTG
  4. TTG Contracts
  5. Abstract TTG Contracts
  6. Interfaces

IBatchGovernor

PreviousInterfacesNextIERC5805

Inherits: IGovernor

Author: M^0 Labs

Functions

castVotes

Allows the caller to cast votes on multiple proposals.

function castVotes(uint256[] calldata proposalIds, uint8[] calldata supportList) external returns (uint256 weight);

Parameters

Name
Type
Description

proposalIds

uint256[]

The list of unique proposal IDs being voted on.

supportList

uint8[]

The list of support type per proposal IDs to cast.

Returns

Name
Type
Description

weight

uint256

The number of votes cast for each proposal (the same for all of them).

castVotesBySig

Allows a signer to cast votes on multiple proposals via an ECDSA secp256k1 signature.

function castVotesBySig(uint256[] calldata proposalIds, uint8[] calldata supportList, uint8 v, bytes32 r, bytes32 s)
    external
    returns (uint256 weight);

Parameters

Name
Type
Description

proposalIds

uint256[]

The list of unique proposal IDs being voted on.

supportList

uint8[]

The list of support type per proposal IDs to cast.

v

uint8

An ECDSA secp256k1 signature parameter.

r

bytes32

An ECDSA secp256k1 signature parameter.

s

bytes32

An ECDSA secp256k1 signature parameter.

Returns

Name
Type
Description

weight

uint256

The number of votes cast for each proposal (the same for all of them).

castVotesBySig

Allows a signer to cast votes on multiple proposals via an arbitrary signature.

function castVotesBySig(
    address voter,
    uint256[] calldata proposalIds,
    uint8[] calldata supportList,
    bytes memory signature
) external returns (uint256 weight);

Parameters

Name
Type
Description

voter

address

The address of the account casting the votes.

proposalIds

uint256[]

The list of unique proposal IDs being voted on.

supportList

uint8[]

The list of support type per proposal IDs to cast.

signature

bytes

An arbitrary signature

Returns

Name
Type
Description

weight

uint256

The number of votes cast for each proposal (the same for all of them).

castVotesWithReason

Allows the caller to cast votes with reason on multiple proposals.

function castVotesWithReason(uint256[] calldata proposalIds, uint8[] calldata supportList, string[] calldata reasonList)
    external
    returns (uint256 weight);

Parameters

Name
Type
Description

proposalIds

uint256[]

The list of unique proposal IDs being voted on.

supportList

uint8[]

The list of support type per proposal IDs to cast.

reasonList

string[]

The list of reason per proposal IDs to cast.

Returns

Name
Type
Description

weight

uint256

The number of votes cast for each proposal (the same for all of them).

castVotesWithReasonBySig

Allows a signer to cast votes with reason on multiple proposals via an ECDSA secp256k1 signature.

function castVotesWithReasonBySig(
    uint256[] calldata proposalIds,
    uint8[] calldata supportList,
    string[] calldata reasonList,
    uint8 v,
    bytes32 r,
    bytes32 s
) external returns (uint256 weight);

Parameters

Name
Type
Description

proposalIds

uint256[]

The list of unique proposal IDs being voted on.

supportList

uint8[]

The list of support type per proposal IDs to cast.

reasonList

string[]

The list of reason per proposal IDs to cast.

v

uint8

An ECDSA secp256k1 signature parameter.

r

bytes32

An ECDSA secp256k1 signature parameter.

s

bytes32

An ECDSA secp256k1 signature parameter.

Returns

Name
Type
Description

weight

uint256

The number of votes cast for each proposal (the same for all of them).

castVotesWithReasonBySig

Allows a signer to cast votes with reason on multiple proposals via an arbitrary signature.

function castVotesWithReasonBySig(
    address voter,
    uint256[] calldata proposalIds,
    uint8[] calldata supportList,
    string[] calldata reasonList,
    bytes memory signature
) external returns (uint256 weight);

Parameters

Name
Type
Description

voter

address

The address of the account casting the votes.

proposalIds

uint256[]

The list of unique proposal IDs being voted on.

supportList

uint8[]

The list of support type per proposal IDs to cast.

reasonList

string[]

The list of reason per proposal IDs to cast.

signature

bytes

An arbitrary signature

Returns

Name
Type
Description

weight

uint256

The number of votes cast for each proposal (the same for all of them).

getBallotDigest

Returns the ballot digest to be signed, via EIP-712, given an internal digest (i.e. hash struct).

function getBallotDigest(uint256 proposalId, uint8 support) external view returns (bytes32);

Parameters

Name
Type
Description

proposalId

uint256

The unique proposal ID being voted on.

support

uint8

The type of support to cast for the proposal.

Returns

Name
Type
Description

<none>

bytes32

The digest to be signed.

getBallotsDigest

Returns the ballots digest to be signed, via EIP-712, given an internal digest (i.e. hash struct).

function getBallotsDigest(uint256[] calldata proposalIds, uint8[] calldata supportList)
    external
    view
    returns (bytes32);

Parameters

Name
Type
Description

proposalIds

uint256[]

The list of unique proposal IDs being voted on.

supportList

uint8[]

The list of support type per proposal IDs to cast.

Returns

Name
Type
Description

<none>

bytes32

The digest to be signed.

getBallotWithReasonDigest

Returns the ballot with reason digest to be signed, via EIP-712, given an internal digest (i.e. hash struct).

function getBallotWithReasonDigest(uint256 proposalId, uint8 support, string calldata reason)
    external
    view
    returns (bytes32);

Parameters

Name
Type
Description

proposalId

uint256

The unique proposal ID being voted on.

support

uint8

The type of support to cast for the proposal.

reason

string

The reason for which the caller casts their vote, if any.

Returns

Name
Type
Description

<none>

bytes32

The digest to be signed.

getBallotsWithReasonDigest

Returns the ballots with reason digest to be signed, via EIP-712, given an internal digest (i.e. hash struct).

function getBallotsWithReasonDigest(
    uint256[] calldata proposalIds,
    uint8[] calldata supportList,
    string[] calldata reasonList
) external view returns (bytes32);

Parameters

Name
Type
Description

proposalIds

uint256[]

The list of unique proposal IDs being voted on.

supportList

uint8[]

The list of support type per proposal IDs to cast.

reasonList

string[]

The list of reason per proposal IDs to cast.

Returns

Name
Type
Description

<none>

bytes32

The digest to be signed.

hashProposal

Returns the unique identifier for the proposal if it were created at this exact moment.

function hashProposal(bytes memory callData) external view returns (uint256);

Parameters

Name
Type
Description

callData

bytes

The single call data used to call this governor upon execution of a proposal.

Returns

Name
Type
Description

<none>

uint256

The unique identifier for the proposal.

voteToken

Returns the EIP-5805 token contact used for determine voting power and total supplies.

function voteToken() external view returns (address);

BALLOTS_TYPEHASH

Returns the EIP712 typehash used in the encoding of the digest for castVotesBySig function.

function BALLOTS_TYPEHASH() external pure returns (bytes32);

BALLOTS_WITH_REASON_TYPEHASH

Returns the EIP712 typehash used in the encoding of the digest for castVotesWithReasonBySig function.

function BALLOTS_WITH_REASON_TYPEHASH() external pure returns (bytes32);

Errors

AlreadyVoted

Revert message when a voter is trying to vote on a proposal they already voted on.

error AlreadyVoted();

ArrayLengthMismatch

Revert message when input arrays do not match in length.

error ArrayLengthMismatch(uint256 length1, uint256 length2);

EmptyProposalIdsArray

Revert message when the proposal IDs array is empty.

error EmptyProposalIdsArray();

ExecutionFailed

Revert message when execution of a proposal fails.

error ExecutionFailed(bytes data);

Parameters

Name
Type
Description

data

bytes

The revert data returned due to the failed execution.

InvalidCallData

Revert message when a proposal's call data is not specifically supported.

error InvalidCallData();

InvalidCallDatasLength

Revert message when a proposal's call data array is not of length 1.

error InvalidCallDatasLength();

InvalidTarget

Revert message when a proposal target is not this governor itself.

error InvalidTarget();

InvalidTargetsLength

Revert message when a proposal's targets array is not of length 1.

error InvalidTargetsLength();

InvalidValue

Revert message when a proposal value is not 0 ETH.

error InvalidValue();

InvalidValuesLength

Revert message when a proposal's values array is not of length 1.

error InvalidValuesLength();

InvalidVoteStart

Revert message when a an invalid vote start is detected.

error InvalidVoteStart();

InvalidVoteTokenAddress

Revert message when the vote token specified in the constructor is address(0).

error InvalidVoteTokenAddress();

NotSelf

Revert message when the caller of a governance-controlled function is not this governor itself.

error NotSelf();

ProposalCannotBeExecuted

Revert message when the proposal information provided cannot be executed.

error ProposalCannotBeExecuted();

ProposalDoesNotExist

Revert message when the proposal does not exist.

error ProposalDoesNotExist();

ProposalExists

Revert message when the proposal already exists.

error ProposalExists();

ProposalInactive

Revert message when voting on a proposal that is not in an active state (i.e. not collecting votes).

error ProposalInactive(ProposalState state);

Parameters

Name
Type
Description

state

ProposalState

The current state of the proposal.

ZeroVotingPower

Revert message when voting on a proposal with a zero voting weight.

error ZeroVotingPower();

Enums

VoteType

The type of support to cast for a proposal.

enum VoteType {
    No,
    Yes
}
Git Source