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
  • claim
  • claimBySig
  • claimBySig
  • distribute
  • CLAIM_TYPEHASH
  • distributionOfAt
  • getClaimable
  • getClaimDigest
  • getDistributable
  • hasClaimed
  • name
  • zeroToken
  • Events
  • Claim
  • Distribution
  • Errors
  • InvalidDestinationAddress
  • InvalidZeroTokenAddress
  • NotPastTimepoint
  • StartEpochAfterEndEpoch
  • TransferFailed
  1. Technical Documentation
  2. Source Code Reference
  3. TTG
  4. TTG Contracts
  5. TTG Interfaces

IDistributionVault

PreviousTTG InterfacesNextIRegistrar

Inherits: IERC6372, IStatefulERC712

Author: M^0 Labs

Functions

claim

Allows a caller to claim token distribution between inclusive epochs startEpoch and endEpoch.

function claim(address token, uint256 startEpoch, uint256 endEpoch, address destination)
    external
    returns (uint256 claimed);

Parameters

Name
Type
Description

token

address

The address of the token being claimed.

startEpoch

uint256

The starting epoch number as a clock value.

endEpoch

uint256

The ending epoch number as a clock value.

destination

address

The address the account where the claimed token will be sent.

Returns

Name
Type
Description

claimed

uint256

The total amount of token claimed by account.

claimBySig

Allows a signer to claim token distribution between inclusive epochs startEpoch and endEpoch.

function claimBySig(
    address account,
    address token,
    uint256 startEpoch,
    uint256 endEpoch,
    address destination,
    uint256 deadline,
    uint8 v,
    bytes32 r,
    bytes32 s
) external returns (uint256 claimed);

Parameters

Name
Type
Description

account

address

The purported address of the signing account.

token

address

The address of the token being claimed.

startEpoch

uint256

The starting epoch number as a clock value.

endEpoch

uint256

The ending epoch number as a clock value.

destination

address

The address of the account where the claimed token will be sent.

deadline

uint256

The last timestamp at which the signature is still valid.

v

uint8

v of the signature.

r

bytes32

r of the signature.

s

bytes32

s of the signature.

Returns

Name
Type
Description

claimed

uint256

The total amount of token claimed by account.

claimBySig

Allows a signer to claim token distribution between inclusive epochs startEpoch and endEpoch.

function claimBySig(
    address account,
    address token,
    uint256 startEpoch,
    uint256 endEpoch,
    address destination,
    uint256 deadline,
    bytes memory signature
) external returns (uint256 claimed);

Parameters

Name
Type
Description

account

address

The purported address of the signing account.

token

address

The address of the token being claimed.

startEpoch

uint256

The starting epoch number as a clock value.

endEpoch

uint256

The ending epoch number as a clock value.

destination

address

The address of the account where the claimed token will be sent.

deadline

uint256

The last timestamp at which the signature is still valid.

signature

bytes

A byte array signature.

Returns

Name
Type
Description

claimed

uint256

The total amount of token claimed by account.

distribute

Distributes the unaccounted balance of token.

function distribute(address token) external returns (uint256);

Parameters

Name
Type
Description

token

address

The address of the token being distributed.

Returns

Name
Type
Description

<none>

uint256

The total amount of additional tokens accounted in this distribution event.

CLAIM_TYPEHASH

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

function CLAIM_TYPEHASH() external view returns (bytes32);

distributionOfAt

Returns the total amount of token eligible for distribution to holder at the end of epoch epoch.

function distributionOfAt(address token, uint256 epoch) external view returns (uint256);

Parameters

Name
Type
Description

token

address

The address of some token.

epoch

uint256

The epoch number as a clock value.

Returns

Name
Type
Description

<none>

uint256

The total amount of token eligible for distribution to holder at the end of the epoch.

getClaimable

Returns the amount of token account can claim between inclusive epochs startEpoch and endEpoch.

function getClaimable(address token, address account, uint256 startEpoch, uint256 endEpoch)
    external
    view
    returns (uint256);

Parameters

Name
Type
Description

token

address

The address of some token.

account

address

The address of some account.

startEpoch

uint256

The starting epoch number as a clock value.

endEpoch

uint256

The ending epoch number as a clock value.

Returns

Name
Type
Description

<none>

uint256

The amount of token that account has yet to claim for these epochs, if any.

getClaimDigest

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

function getClaimDigest(
    address account,
    address token,
    uint256 startEpoch,
    uint256 endEpoch,
    address destination,
    uint256 nonce,
    uint256 deadline
) external view returns (bytes32);

Parameters

Name
Type
Description

account

address

The purported address of the signing account.

token

address

The address of the token being claimed.

startEpoch

uint256

The starting epoch number as a clock value.

endEpoch

uint256

The ending epoch number as a clock value.

destination

address

The address the account where the claimed token will be sent.

nonce

uint256

The nonce of the account claiming the token.

deadline

uint256

The last timestamp at which the signature is still valid.

Returns

Name
Type
Description

<none>

bytes32

The digest to be signed.

getDistributable

Returns the additional balance of token_ that is not yet distributed.

function getDistributable(address token) external view returns (uint256);

Parameters

Name
Type
Description

token

address

The address of some token.

Returns

Name
Type
Description

<none>

uint256

The total amount of token owned by the vault that is yet to be distributed.

hasClaimed

Returns whether account has already claimed their token distribution for epoch.

function hasClaimed(address token, uint256 epoch, address account) external view returns (bool);

Parameters

Name
Type
Description

token

address

The address of some token.

epoch

uint256

The epoch number as a clock value.

account

address

The address of some account.

Returns

Name
Type
Description

<none>

bool

Whether account has already claimed token rewards for epoch.

name

Returns the name of the contract.

function name() external view returns (string memory);

zeroToken

Returns the address of the Zero Token holders must have in order to be eligible for distributions.

function zeroToken() external view returns (address);

Events

Claim

Emitted when account claims token distribution between inclusive epochs startEpoch and endEpoch.

event Claim(address indexed token, address indexed account, uint256 startEpoch, uint256 endEpoch, uint256 amount);

Parameters

Name
Type
Description

token

address

The address of the token being claimed.

account

address

The address of the account claiming the distribution.

startEpoch

uint256

The starting epoch number as a clock value.

endEpoch

uint256

The ending epoch number as a clock value.

amount

uint256

The total amount of token claimed by account.

Distribution

Emitted when token is distributed pro rata to all holders at epoch epoch.

event Distribution(address indexed token, uint256 indexed epoch, uint256 amount);

Parameters

Name
Type
Description

token

address

The address of the token being distributed.

epoch

uint256

The epoch number as a clock value.

amount

uint256

The total amount of token being distributed.

Errors

InvalidDestinationAddress

Revert message when the destination address is address(0).

error InvalidDestinationAddress();

InvalidZeroTokenAddress

Revert message when the Zero Token address set at deployment is address(0).

error InvalidZeroTokenAddress();

NotPastTimepoint

Revert message when a query for past values is for a timepoint greater or equal to the current clock.

error NotPastTimepoint(uint256 timepoint, uint256 clock);

Parameters

Name
Type
Description

timepoint

uint256

The timepoint being queried.

clock

uint256

The current timepoint.

StartEpochAfterEndEpoch

Revert message when the start epoch is greater than the end epoch.

error StartEpochAfterEndEpoch(uint256 startEpoch, uint256 endEpoch);

TransferFailed

Revert message when a token transfer, from this contract, fails.

error TransferFailed();
Git Source