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
  • isValidSignature
  • isValidERC1271Signature
  • decodeECDSASignature
  • decodeShortECDSASignature
  • isValidECDSASignature
  • isValidECDSASignature
  • recoverECDSASigner
  • recoverECDSASigner
  • recoverECDSASigner
  • validateECDSASignature
  • validateECDSASignature
  • validateECDSASignature
  • validateRecoveredSigner
  • Enums
  • Error
  1. Technical Documentation
  2. Source Code Reference
  3. Common
  4. Contracts
  5. Libs

SignatureChecker

PreviousLibsNextUIntMath

Author: M^0 Labs

Functions

isValidSignature

Returns whether a signature is valid (ECDSA/secp256k1 or ERC1271) for a signer and digest.

Signatures must not be used as unique identifiers since the ecrecover EVM opcode allows for malleable (non-unique) signatures. See https://github.com/OpenZeppelin/openzeppelin-contracts/security/advisories/GHSA-4h98-2769-gh6h

function isValidSignature(address signer, bytes32 digest, bytes memory signature) internal view returns (bool);

Parameters

Name
Type
Description

signer

address

The address of the account purported to have signed.

digest

bytes32

The hash of the data that was signed.

signature

bytes

A byte array signature.

Returns

Name
Type
Description

<none>

bool

Whether the signature is valid or not.

isValidERC1271Signature

Returns whether an ERC1271 signature is valid for a signer and digest.

function isValidERC1271Signature(address signer, bytes32 digest, bytes memory signature) internal view returns (bool);

Parameters

Name
Type
Description

signer

address

The address of the account purported to have signed.

digest

bytes32

The hash of the data that was signed.

signature

bytes

A byte array ERC1271 signature.

Returns

Name
Type
Description

<none>

bool

Whether the signature is valid or not.

decodeECDSASignature

Decodes an ECDSA/secp256k1 signature from a byte array to standard v, r, and s parameters.

function decodeECDSASignature(bytes memory signature) internal pure returns (uint8 v, bytes32 r, bytes32 s);

Parameters

Name
Type
Description

signature

bytes

A byte array ECDSA/secp256k1 signature.

Returns

Name
Type
Description

v

uint8

An ECDSA/secp256k1 signature parameter.

r

bytes32

An ECDSA/secp256k1 signature parameter.

s

bytes32

An ECDSA/secp256k1 signature parameter.

decodeShortECDSASignature

Decodes an ECDSA/secp256k1 short signature as defined by EIP2098 from a byte array to standard v, r, and s parameters.

function decodeShortECDSASignature(bytes memory signature) internal pure returns (bytes32 r, bytes32 vs);

Parameters

Name
Type
Description

signature

bytes

A byte array ECDSA/secp256k1 short signature.

Returns

Name
Type
Description

r

bytes32

An ECDSA/secp256k1 signature parameter.

vs

bytes32

An ECDSA/secp256k1 short signature parameter.

isValidECDSASignature

Returns whether an ECDSA/secp256k1 signature is valid for a signer and digest.

function isValidECDSASignature(address signer, bytes32 digest, bytes memory signature) internal pure returns (bool);

Parameters

Name
Type
Description

signer

address

The address of the account purported to have signed.

digest

bytes32

The hash of the data that was signed.

signature

bytes

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

Returns

Name
Type
Description

<none>

bool

Whether the signature is valid or not.

isValidECDSASignature

Returns whether an ECDSA/secp256k1 short signature is valid for a signer and digest.

function isValidECDSASignature(address signer, bytes32 digest, bytes32 r, bytes32 vs) internal pure returns (bool);

Parameters

Name
Type
Description

signer

address

The address of the account purported to have signed.

digest

bytes32

The hash of the data that was signed.

r

bytes32

An ECDSA/secp256k1 signature parameter.

vs

bytes32

An ECDSA/secp256k1 short signature parameter.

Returns

Name
Type
Description

<none>

bool

Whether the signature is valid or not.

recoverECDSASigner

Returns the signer of an ECDSA/secp256k1 signature for some digest.

function recoverECDSASigner(bytes32 digest, bytes memory signature) internal pure returns (Error, address);

Parameters

Name
Type
Description

digest

bytes32

The hash of the data that was signed.

signature

bytes

A byte array ECDSA/secp256k1 signature.

Returns

Name
Type
Description

<none>

Error

An error, if any, that occurred during the signer recovery.

<none>

address

The address of the account recovered form the signature (0 if error).

recoverECDSASigner

Returns the signer of an ECDSA/secp256k1 short signature for some digest.

See https://eips.ethereum.org/EIPS/eip-2098

function recoverECDSASigner(bytes32 digest, bytes32 r, bytes32 vs) internal pure returns (Error, address);

Parameters

Name
Type
Description

digest

bytes32

The hash of the data that was signed.

r

bytes32

An ECDSA/secp256k1 signature parameter.

vs

bytes32

An ECDSA/secp256k1 short signature parameter.

Returns

Name
Type
Description

<none>

Error

An error, if any, that occurred during the signer recovery.

<none>

address

The address of the account recovered form the signature (0 if error).

recoverECDSASigner

Returns the signer of an ECDSA/secp256k1 signature for some digest.

function recoverECDSASigner(bytes32 digest, uint8 v, bytes32 r, bytes32 s)
    internal
    pure
    returns (Error, address signer);

Parameters

Name
Type
Description

digest

bytes32

The hash of the data that was signed.

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

<none>

Error

An error, if any, that occurred during the signer recovery.

signer

address

The address of the account recovered form the signature (0 if error).

validateECDSASignature

Returns an error, if any, in validating an ECDSA/secp256k1 signature for a signer and digest.

function validateECDSASignature(address signer, bytes32 digest, bytes memory signature) internal pure returns (Error);

Parameters

Name
Type
Description

signer

address

The address of the account purported to have signed.

digest

bytes32

The hash of the data that was signed.

signature

bytes

A byte array ERC1271 signature.

Returns

Name
Type
Description

<none>

Error

An error, if any, that occurred during the signer recovery.

validateECDSASignature

Returns an error, if any, in validating an ECDSA/secp256k1 short signature for a signer and digest.

function validateECDSASignature(address signer, bytes32 digest, bytes32 r, bytes32 vs) internal pure returns (Error);

Parameters

Name
Type
Description

signer

address

The address of the account purported to have signed.

digest

bytes32

The hash of the data that was signed.

r

bytes32

An ECDSA/secp256k1 signature parameter.

vs

bytes32

An ECDSA/secp256k1 short signature parameter.

Returns

Name
Type
Description

<none>

Error

An error, if any, that occurred during the signer recovery.

validateECDSASignature

Returns an error, if any, in validating an ECDSA/secp256k1 signature for a signer and digest.

function validateECDSASignature(address signer, bytes32 digest, uint8 v, bytes32 r, bytes32 s)
    internal
    pure
    returns (Error);

Parameters

Name
Type
Description

signer

address

The address of the account purported to have signed.

digest

bytes32

The hash of the data that was signed.

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

<none>

Error

An error, if any, that occurred during the signer recovery.

validateRecoveredSigner

Returns an error if signer is not recoveredSigner.

function validateRecoveredSigner(address signer, address recoveredSigner) internal pure returns (Error);

Parameters

Name
Type
Description

signer

address

The address of the some signer.

recoveredSigner

address

The address of the some recoveredSigner.

Returns

Name
Type
Description

<none>

Error

An error if signer is not recoveredSigner.

Enums

Error

An enum representing the possible errors that can be emitted during signature validation.

enum Error {
    NoError,
    InvalidSignature,
    InvalidSignatureLength,
    InvalidSignatureS,
    InvalidSignatureV,
    SignerMismatch
}
Git Source