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
On this page
  • Functions
  • buy
  • markNextVotingEpochAsActive
  • markParticipation
  • setNextCashToken
  • amountToAuction
  • bootstrapEpoch
  • bootstrapToken
  • cashToken
  • getCost
  • standardGovernor
  • targetSupply
  • vault
  • INITIAL_SUPPLY
  • Events
  • Buy
  • NextCashTokenSet
  • Tagline
  • TargetSupplyInflated
  • Errors
  • BootstrapSupplyTooLarge
  • BootstrapSupplyZero
  • InsufficientAuctionSupply
  • InvalidBootstrapTokenAddress
  • InvalidCashTokenAddress
  • InvalidStandardGovernorAddress
  • InvalidVaultAddress
  • NotStandardGovernor
  • TransferFromFailed
  • DivisionByZero
  • ExpiredBuyOrder
  • ZeroPurchaseAmount
  • SyncBeforeBootstrap
  1. Technical Documentation
  2. Source Code Reference
  3. TTG
  4. TTG Contracts
  5. TTG Interfaces
  6. Tokens

IPowerToken

PreviousIPowerBootstrapTokenNextIZeroToken

M0 Project

  • Home
  • Research

Legal

  • Terms & Conditions
  • Privacy Policy

Copyright 2025 M0 Foundation

Inherits: IEpochBasedInflationaryVoteToken

Author: M^0 Labs

Functions

buy

Allows a caller to buy amount tokens from the auction.

function buy(uint256 minAmount, uint256 maxAmount, address destination, uint16 expiryEpoch)
    external
    returns (uint240 amount, uint256 cost);

Parameters

Name
Type
Description

minAmount

uint256

The minimum amount of tokens the caller is interested in buying.

maxAmount

uint256

The maximum amount of tokens the caller is interested in buying.

destination

address

The address of the account to send the bought tokens.

expiryEpoch

uint16

The epoch number at the end of which the buy order expires.

Returns

Name
Type
Description

amount

uint240

The amount of token bought.

cost

uint256

The total cash token cost of the purchase.

markNextVotingEpochAsActive

Marks the next voting epoch as targeted for inflation.

function markNextVotingEpochAsActive() external;

markParticipation

Marks delegatee as having participated in the current epoch, thus receiving voting power inflation.

function markParticipation(address delegatee) external;

Parameters

Name
Type
Description

delegatee

address

The address of the account being marked as having participated.

setNextCashToken

Queues the cash token that will take effect from the next epoch onward.

function setNextCashToken(address nextCashToken) external;

Parameters

Name
Type
Description

nextCashToken

address

The address of the cash token taking effect from the next epoch onward.

amountToAuction

Returns the amount of tokens that can be bought in the auction.

function amountToAuction() external view returns (uint240);

bootstrapEpoch

Returns the epoch from which token balances and voting powers are bootstrapped.

function bootstrapEpoch() external view returns (uint16);

bootstrapToken

Returns the address of the token in which token balances and voting powers are bootstrapped.

function bootstrapToken() external view returns (address);

cashToken

Returns the address of the cash token required to buy from the token auction.

function cashToken() external view returns (address);

getCost

Returns the total cost, in cash token, of purchasing amount tokens from the auction.

function getCost(uint256 amount) external view returns (uint256);

Parameters

Name
Type
Description

amount

uint256

Some amount of tokens.

Returns

Name
Type
Description

<none>

uint256

The total cost, in cash token, of amount tokens.

standardGovernor

Returns the address of the Standard Governor.

function standardGovernor() external view returns (address);

targetSupply

Returns the target supply, which helps determine the amount of tokens up for auction.

function targetSupply() external view returns (uint256);

vault

Returns the address of the Vault.

function vault() external view returns (address);

INITIAL_SUPPLY

Returns the initial supply of the token.

function INITIAL_SUPPLY() external pure returns (uint240);

Events

Buy

Emitted when buyer has bought amount tokens from the auction, as a total cash token value of cost.

event Buy(address indexed buyer, uint240 amount, uint256 cost);

Parameters

Name
Type
Description

buyer

address

The address of account that bought tokens from the auction.

amount

uint240

The amount of tokens bought.

cost

uint256

The total cash token cost of the purchase.

NextCashTokenSet

Emitted when the cash token is queued to become nextCashToken at the start of epoch startingEpoch.

event NextCashTokenSet(uint16 indexed startingEpoch, address indexed nextCashToken);

Parameters

Name
Type
Description

startingEpoch

uint16

The epoch number as a clock value in which the new cash token takes effect.

nextCashToken

address

The address of the cash token taking effect at startingEpoch.

Tagline

Emitted in the constructor at deployment.

event Tagline(string tagline);

Parameters

Name
Type
Description

tagline

string

The tagline of the contract.

TargetSupplyInflated

Emitted when the target supply is queued to become targetSupply at the start of epoch targetEpoch.

event TargetSupplyInflated(uint16 indexed targetEpoch, uint240 indexed targetSupply);

Parameters

Name
Type
Description

targetEpoch

uint16

The epoch number as a clock value in which the new target supply takes effect.

targetSupply

uint240

The target supply taking effect at startingEpoch.

Errors

BootstrapSupplyTooLarge

Revert message when the total supply of the bootstrap token is larger than type(uint240).max.

error BootstrapSupplyTooLarge();

BootstrapSupplyZero

Revert message when the total supply of the bootstrap token is 0.

error BootstrapSupplyZero();

InsufficientAuctionSupply

Revert message when the amount available for auction is less than the minimum requested to buy.

error InsufficientAuctionSupply(uint240 amountToAuction, uint240 minAmountRequested);

Parameters

Name
Type
Description

amountToAuction

uint240

The amount available for auction.

minAmountRequested

uint240

The minimum amount that was requested to buy.

InvalidBootstrapTokenAddress

Revert message when the Bootstrap Token specified in the constructor is address(0).

error InvalidBootstrapTokenAddress();

InvalidCashTokenAddress

Revert message when the Cash Token specified in the constructor is address(0).

error InvalidCashTokenAddress();

InvalidStandardGovernorAddress

Revert message when the Standard Governor specified in the constructor is address(0).

error InvalidStandardGovernorAddress();

InvalidVaultAddress

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

error InvalidVaultAddress();

NotStandardGovernor

Revert message when the caller is not the Standard Governor.

error NotStandardGovernor();

TransferFromFailed

Revert message when a token transferFrom fails.

error TransferFromFailed();

DivisionByZero

Revert message when auction calculations use zero as denominator.

error DivisionByZero();

ExpiredBuyOrder

Revert message when the buy order has expired using epoch-based expiration clock.

error ExpiredBuyOrder();

ZeroPurchaseAmount

Revert message when the buy order has zero maximum and minimum amounts.

error ZeroPurchaseAmount();

SyncBeforeBootstrap

Revert message when trying to sync to an epoch that is before the bootstrap epoch.

error SyncBeforeBootstrap(uint16 bootstrapEpoch, uint16 epoch);

Parameters

Name
Type
Description

bootstrapEpoch

uint16

The bootstrap epoch.

epoch

uint16

The epoch attempting to be synced to, not inclusively.

Git Source