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
  • transferWithAuthorization
  • transferWithAuthorization
  • transferWithAuthorization
  • receiveWithAuthorization
  • receiveWithAuthorization
  • receiveWithAuthorization
  • cancelAuthorization
  • cancelAuthorization
  • cancelAuthorization
  • authorizationState
  • TRANSFER_WITH_AUTHORIZATION_TYPEHASH
  • RECEIVE_WITH_AUTHORIZATION_TYPEHASH
  • CANCEL_AUTHORIZATION_TYPEHASH
  • Events
  • AuthorizationCanceled
  • AuthorizationUsed
  • Errors
  • AuthorizationAlreadyUsed
  • AuthorizationExpired
  • AuthorizationNotYetValid
  • CallerMustBePayee
  1. Technical Documentation
  2. Source Code Reference
  3. Common
  4. Contracts
  5. Interfaces

IERC3009

PreviousIERC20ExtendedNextIERC712

Inherits: IStatefulERC712

Author: M^0 Labs

The interface as defined by EIP-3009: https://eips.ethereum.org/EIPS/eip-3009

Functions

transferWithAuthorization

Execute a transfer with a signed authorization.

function transferWithAuthorization(
    address from,
    address to,
    uint256 value,
    uint256 validAfter,
    uint256 validBefore,
    bytes32 nonce,
    bytes memory signature
) external;

Parameters

Name
Type
Description

from

address

Payer's address (Authorizer).

to

address

Payee's address.

value

uint256

Amount to be transferred.

validAfter

uint256

The time after which this is valid (unix time).

validBefore

uint256

The time before which this is valid (unix time).

nonce

bytes32

Unique nonce.

signature

bytes

A byte array ECDSA/secp256k1 signature (encoded r, s, v).

transferWithAuthorization

Execute a transfer with a signed authorization.

function transferWithAuthorization(
    address from,
    address to,
    uint256 value,
    uint256 validAfter,
    uint256 validBefore,
    bytes32 nonce,
    bytes32 r,
    bytes32 vs
) external;

Parameters

Name
Type
Description

from

address

Payer's address (Authorizer).

to

address

Payee's address.

value

uint256

Amount to be transferred.

validAfter

uint256

The time after which this is valid (unix time).

validBefore

uint256

The time before which this is valid (unix time).

nonce

bytes32

Unique nonce.

r

bytes32

An ECDSA/secp256k1 signature parameter.

vs

bytes32

An ECDSA/secp256k1 short signature parameter.

transferWithAuthorization

Execute a transfer with a signed authorization.

function transferWithAuthorization(
    address from,
    address to,
    uint256 value,
    uint256 validAfter,
    uint256 validBefore,
    bytes32 nonce,
    uint8 v,
    bytes32 r,
    bytes32 s
) external;

Parameters

Name
Type
Description

from

address

Payer's address (Authorizer).

to

address

Payee's address.

value

uint256

Amount to be transferred.

validAfter

uint256

The time after which this is valid (unix time).

validBefore

uint256

The time before which this is valid (unix time).

nonce

bytes32

Unique nonce.

v

uint8

v of the signature.

r

bytes32

r of the signature.

s

bytes32

s of the signature.

receiveWithAuthorization

Receive a transfer with a signed authorization from the payer.

This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks. (See security considerations)

function receiveWithAuthorization(
    address from,
    address to,
    uint256 value,
    uint256 validAfter,
    uint256 validBefore,
    bytes32 nonce,
    bytes memory signature
) external;

Parameters

Name
Type
Description

from

address

Payer's address (Authorizer).

to

address

Payee's address.

value

uint256

Amount to be transferred.

validAfter

uint256

The time after which this is valid (unix time).

validBefore

uint256

The time before which this is valid (unix time).

nonce

bytes32

Unique nonce.

signature

bytes

A byte array ECDSA/secp256k1 signature (encoded r, s, v).

receiveWithAuthorization

Receive a transfer with a signed authorization from the payer.

This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks. (See security considerations)

function receiveWithAuthorization(
    address from,
    address to,
    uint256 value,
    uint256 validAfter,
    uint256 validBefore,
    bytes32 nonce,
    bytes32 r,
    bytes32 vs
) external;

Parameters

Name
Type
Description

from

address

Payer's address (Authorizer).

to

address

Payee's address.

value

uint256

Amount to be transferred.

validAfter

uint256

The time after which this is valid (unix time).

validBefore

uint256

The time before which this is valid (unix time).

nonce

bytes32

Unique nonce.

r

bytes32

An ECDSA/secp256k1 signature parameter.

vs

bytes32

An ECDSA/secp256k1 short signature parameter.

receiveWithAuthorization

Receive a transfer with a signed authorization from the payer.

This has an additional check to ensure that the payee's address matches the caller of this function to prevent front-running attacks. (See security considerations)

function receiveWithAuthorization(
    address from,
    address to,
    uint256 value,
    uint256 validAfter,
    uint256 validBefore,
    bytes32 nonce,
    uint8 v,
    bytes32 r,
    bytes32 s
) external;

Parameters

Name
Type
Description

from

address

Payer's address (Authorizer).

to

address

Payee's address.

value

uint256

Amount to be transferred.

validAfter

uint256

The time after which this is valid (unix time).

validBefore

uint256

The time before which this is valid (unix time).

nonce

bytes32

Unique nonce.

v

uint8

v of the signature.

r

bytes32

r of the signature.

s

bytes32

s of the signature.

cancelAuthorization

Attempt to cancel an authorization.

function cancelAuthorization(address authorizer, bytes32 nonce, bytes memory signature) external;

Parameters

Name
Type
Description

authorizer

address

Authorizer's address.

nonce

bytes32

Nonce of the authorization.

signature

bytes

A byte array ECDSA/secp256k1 signature (encoded r, s, v).

cancelAuthorization

Attempt to cancel an authorization.

function cancelAuthorization(address authorizer, bytes32 nonce, bytes32 r, bytes32 vs) external;

Parameters

Name
Type
Description

authorizer

address

Authorizer's address.

nonce

bytes32

Nonce of the authorization.

r

bytes32

An ECDSA/secp256k1 signature parameter.

vs

bytes32

An ECDSA/secp256k1 short signature parameter.

cancelAuthorization

Attempt to cancel an authorization.

function cancelAuthorization(address authorizer, bytes32 nonce, uint8 v, bytes32 r, bytes32 s) external;

Parameters

Name
Type
Description

authorizer

address

Authorizer's address.

nonce

bytes32

Nonce of the authorization.

v

uint8

v of the signature.

r

bytes32

r of the signature.

s

bytes32

s of the signature.

authorizationState

Returns the state of an authorization.

Nonces are randomly generated 32-byte data unique to the authorizer's address

function authorizationState(address authorizer, bytes32 nonce) external view returns (bool);

Parameters

Name
Type
Description

authorizer

address

Authorizer's address.

nonce

bytes32

Nonce of the authorization.

Returns

Name
Type
Description

<none>

bool

True if the nonce is used.

TRANSFER_WITH_AUTHORIZATION_TYPEHASH

Returns transferWithAuthorization typehash.

function TRANSFER_WITH_AUTHORIZATION_TYPEHASH() external view returns (bytes32);

RECEIVE_WITH_AUTHORIZATION_TYPEHASH

Returns receiveWithAuthorization typehash.

function RECEIVE_WITH_AUTHORIZATION_TYPEHASH() external view returns (bytes32);

CANCEL_AUTHORIZATION_TYPEHASH

Returns cancelAuthorization typehash.

function CANCEL_AUTHORIZATION_TYPEHASH() external view returns (bytes32);

Events

AuthorizationCanceled

Emitted when an authorization has been canceled.

event AuthorizationCanceled(address indexed authorizer, bytes32 indexed nonce);

Parameters

Name
Type
Description

authorizer

address

Authorizer's address.

nonce

bytes32

Nonce of the canceled authorization.

AuthorizationUsed

Emitted when an authorization has been used.

event AuthorizationUsed(address indexed authorizer, bytes32 indexed nonce);

Parameters

Name
Type
Description

authorizer

address

Authorizer's address.

nonce

bytes32

Nonce of the used authorization.

Errors

AuthorizationAlreadyUsed

Emitted when an authorization has already been used.

error AuthorizationAlreadyUsed(address authorizer, bytes32 nonce);

Parameters

Name
Type
Description

authorizer

address

Authorizer's address.

nonce

bytes32

Nonce of the used authorization.

AuthorizationExpired

Emitted when an authorization is expired.

error AuthorizationExpired(uint256 timestamp, uint256 validBefore);

Parameters

Name
Type
Description

timestamp

uint256

Timestamp at which the transaction was submitted.

validBefore

uint256

Timestamp before which the authorization would have been valid.

AuthorizationNotYetValid

Emitted when an authorization is not yet valid.

error AuthorizationNotYetValid(uint256 timestamp, uint256 validAfter);

Parameters

Name
Type
Description

timestamp

uint256

Timestamp at which the transaction was submitted.

validAfter

uint256

Timestamp after which the authorization will be valid.

CallerMustBePayee

Emitted when the caller of receiveWithAuthorization is not the payee.

error CallerMustBePayee(address caller, address payee);

Parameters

Name
Type
Description

caller

address

Caller's address.

payee

address

Payee's address.

Git Source