Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,070 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CMTA Token (CMTAT)

Latest audited release: v3.0.0

Latest release: v3.2.0

CMTAT is a blockchain-agnostic open-source security token framework. This repository provides the Solidity reference implementation for EVM-compatible blockchains such as Ethereum, Optimism, Arbitrum, and Polygon PoS. It is developed and maintained by the Capital Markets and Technology Association (CMTA).
It provides a modular implementation focused on regulated issuance and lifecycle management (transfer restrictions, enforcement, pause/deactivation, supply controls, documentation, and optional cross-chain features), with multiple deployment variants (standalone and upgradeable) to fit different product and jurisdiction requirements.

What is CMTAT?

CMTAT extends the standard ERC-20 token with compliance features required for regulated financial instruments:

Feature Purpose Standards Module Scope
Pause Freeze all transfers globally (e.g., during corporate actions) ERC-3643, ERC-7551 (eWpG profile) Core
Deactivate Permanently disable token operations when required by lifecycle/governance decisions ERC-8343 (draft, not yet merged) Core
Account Freeze Block specific addresses from transferring ERC-3643 enforcement model, ERC-7943 send/receive checks Core
Mint / Burn Controlled issuance and redemption of tokens ERC-3643, ERC-7551 (eWpG profile) Core
Batch Mint / Batch Burn Process multiple mint or burn operations in a single transaction ERC-3643 Core
Configurable Decimals Define token decimals at deployment time ERC-20-compatible behavior Core
Forced Transfer Admins can move tokens from frozen accounts ERC-3643, ERC-7551 (eWpG profile), ERC-7943 Core/Extension
Set Name / Symbol Update token name and symbol after deployment (supported deployment versions) ERC-3643 Core
Contract Versioning Expose the contract's implementation version on-chain as a human-readable SemVer string via version() ERC-8303 (draft, not yet merged), ERC-3643 Core
Freeze Partial Tokens Freeze a specific amount of tokens on an address ERC-3643, ERC-7551 (eWpG profile), ERC-7943 equivalent (setFrozenTokens/getFrozenTokens) Extension
Transfer Validation Plug-in rule engine to restrict transfers by origin, receiver, or amount ERC-3643, ERC-7551, ERC-7943 Extension/Option
Snapshots Record balances at a specific point in time (e.g., for dividends) CMTAT SnapshotEngine integration Extension/Option
Holder List Maintain on-chain the set of addresses holding a non-zero balance (issuer reporting, corporate actions) Fungible holder enumeration (draft) Option
Documents Attach legal documents to the token on-chain ERC-1643-compatible document model Extension/Option
Cross-Chain Mint/Burn Cross-chain bridge-oriented mint/burn interface ERC-7802 Extension
Permit Signature-based approvals without on-chain approve transaction ERC-2612 Deployment-version specific
Multicall Execute multiple calls in one transaction ERC-6357 Deployment-version specific
UUPS Upgradeability Upgradeable proxy pattern support ERC-1822 Deployment-version specific
Debt Features Debt lifecycle and credit-event related capabilities CMTAT Debt modules Deployment-version specific
ERC-1363 Payable Token Hooks Token callbacks (transferAndCall / approveAndCall) ERC-1363 Deployment-version specific

Document model note:

Who uses CMTAT?

CMTAT is used in production by major financial institutions including UBS, Taurus SA, Zand Trust, Daura, Obligate, and Syz Group to tokenize equities, artwork, bonds, structured products, money market funds, and stablecoins.

Example Per Use Case

Supported Financial Instruments

Product Deployment Version
Equities CMTAT Standard
Equities / Bonds with balance snapshots (dividends, corporate actions) CMTAT Snapshot, CMTAT Debt, CMTAT DebtEngine
On-chain shareholder registry / holder enumeration CMTAT HolderList
Equities (Germany / eWpG) CMTAT ERC-7551
Debt / Bonds CMTAT Debt
Debt / Bonds (external debt engine) CMTAT DebtEngine
Stablecoins CMTAT Light
Allowlist / Whitelist CMTAT Allowlist or CMTAT Standard with RuleEngine
Permit + Multicall CMTAT Permit
Payable token / DeFi callbacks CMTAT ERC-1363
Any (UUPS upgradeable proxy) CMTAT UUPS

Most products come in a standalone (immutable) or upgradeable (proxy) variant. The UUPS variant (CMTATUpgradeableUUPS) is upgradeable only — no standalone counterpart exists.

Contract Sizes

Measured with solc 0.8.34, optimizer enabled (200 runs). EVM deployed bytecode limit: 24.576 KiB.

Deployment Version Deployed (KiB) Initcode standalone (KiB) Initcode upgradeable (KiB)
CMTAT Standard 22.251 25.663 22.577
CMTAT Snapshot 22.075 25.487 22.401
CMTAT HolderList 23.825 27.255 24.151
CMTAT Light 11.278 13.055 11.487
CMTAT Allowlist 19.882 23.079 20.208
CMTAT Debt 23.189 26.324 23.398
CMTAT DebtEngine 23.799 26.934 24.008
CMTAT ERC-7551 22.812 26.224 23.138
CMTAT ERC-1363 23.813 27.267 24.139
CMTAT Permit 23.341 26.650 23.550
CMTAT UUPS 23.552 23.904

All variants are within the deployed bytecode limit. The deployed size is identical between standalone and upgradeable for the same variant; the initcode is larger for standalone contracts since it includes the full constructor logic rather than an initializer.

Key Standards

CMTAT implements a wide set of Ethereum standards:

  • ERC-20 — fungible token
  • ERC-3643 — security token (without on-chain identity)
  • ERC-7551 — crypto security token interface (Germany eWpG profile)
  • ERC-7943 (uRWA) — universal RWA interface
  • ERC-1404 — restricted token. CMTAT (and the RuleEngine mock) implement both the original ERC-1404 — only ever published as a GitHub issue, never a merged EIP (detectTransferRestriction / messageForTransferRestriction) — and its current rework, the draft proposal "Simple Restricted Token" (ERCs PR #1701, open/draft), which adds the spender-aware detectTransferRestrictionFrom.
  • ERC-2612 Permit — gasless approvals (specific deployment versions only)
  • ERC-1363 — payable token hooks (specific deployment versions only)
  • ERC-6357 Multicall — batched calls in one transaction (specific deployment versions only)
  • ERC-2771 — meta-transactions (gas sponsorship / gasless)
  • ERC-7802 — cross-chain transfers
  • ERC-7201 — storage namespaces for upgradeability
  • ERC-8303 — contract version exposed on-chain via version() (draft, not yet merged — PR #1819)
  • ERC-8343 — contract deactivation (deactivateContract() / deactivated()), formerly ICMTATDeactivate (draft, not yet merged — PR #1900)
  • UUPS Proxy (ERC-1822 pattern) — upgradeability pattern (specific deployment versions only)

architecture-ERC-simplified.drawio

Cross-Chain Compatibility

CMTAT provides cross-chain compatibility through ERC20CrossChain and related deployment options:

  • ERC-7802: native crosschainMint / crosschainBurn support for bridge-style interoperability.
  • Chainlink CCIP (CCT): compatible burn/mint token flow, including getCCIPAdmin() support through the CCIPModule. Scripts and examples are available in the project CMTAT-CCIP
  • LayerZero: supported through external OFT adapters (ERC-3643 and ERC-7802 variants) in CMTAT-LayerZero.

For full architecture, permissions, and operational notes, see:

Other CMTA projects

Deployment version

This section regroups projects which implements new CMTAT deployment version for EVM/Ethereum with additionnal features

The SnapshotEngine is a smart contract system designed to perform ERC-20 on-chain snapshots, making it easier to distribute dividends or other token-based rewards directly on-chain. The SnapshotEngine can be external or integrated directly in the main token contract.

Integration of FIX descriptor support for CMTAT.

This project provides a modular engine system that enables CMTAT tokens to store, manage, and verify FIX (Financial Information eXchange) protocol descriptors on-chain.

Integration of CMTAT with Chainlink's Automated Compliance Engine (ACE), keeping compliance rules in a separate policy engine so updating compliance becomes a configuration change rather than a contract redeployment. Two deployment variants are provided: Lite (transfer validation only) and Standard (policy-authoritative authorization).

Blockchain Implementations

CMTAT is blockchain-agnostic and also has implementations/adaptations beyond this Solidity EVM repository:

Utility contract

The RuleEngine is an external contract used to apply transfer restrictions to another contract, such as CMTAT and ERC-3643 tokens. Acting as a controller, it can call different contract rules and apply these rules on each transfer.

Rules is a collection of on-chain compliance and transfer-restriction rules designed for use with the CMTA RuleEngine and the CMTAT token standard.

The SnapshotEngine is a smart contract system designed to perform ERC-20 on-chain snapshots, making it easier to distribute dividends or other token-based rewards directly on-chain

The IncomeVault is a prototype to perform coupon-payment dividend with a CMTAT and the snapshotEngine

Factory to deploy CMTAT with Transparent, UUPS and Beacon proxy using deterministic addresses (via CREATE2)

The DvP (Delivery versus Payment) smart contract (DVP.sol) interacts with an Asset Token smart contract (Delivery) and a Payment Order Token smart contract (Payment).

Security

CMTAT has been audited by ABDK (v1.0, v2.3.0) and Halborn (v3.0.0), with ~99% test coverage across 5,626 automated tests.

WARNING — audit status. Only v3.0.0 has undergone a formal external security audit (Halborn). The subsequent releases v3.1.0, v3.2.0 and v3.3.0 have NOT been formally audited; they have only been reviewed with static analyzers (Slither, Aderyn) and AI-assisted auditing tools (Nethermind Audit Agent), which are not a substitute for a formal audit. Anyone deploying these versions in production must perform their own independent security assessment and audit before relying on them.

In addition to external audits and test coverage, CMTAT security reviews also include static analysis tools such as Aderyn and Slither, as well as AI-assisted auditing tools such as Nethermind Audit Agent.

Per-tool reports, maintainer feedback, and dispositions are collected in doc/security/AUDIT.md. The v3.3.0 static-analysis run (Slither 0.11.5 — 110 results; Aderyn 0.6.5 — 2 High, 10 Low) surfaced no exploitable finding requiring a code fix: every result is a false positive, a documented design choice, an environment note, or a style/optimization item.

See SECURITY.md for the responsible disclosure policy.

License

MPL-2.0 — weak copyleft, allows commercial use.

License Comparison

Topic MPL-2.0 MIT GNU GPL (v3) Apache-2.0
Open source
Commercial use
Copyleft level Weak (file-level) None (permissive) Strong (project-level) None (permissive)
If you modify licensed code Must publish modified MPL files No obligation to publish Must publish derivative source under GPL No obligation to publish
Proprietary code mixing Allowed (keep MPL files under MPL) Allowed Restricted by GPL copyleft Allowed
Patent license (explicit) (not explicit) (via GPLv3 terms) (explicit)
Notice / attribution Required Required Required Required (+ NOTICE handling)

Similarity: all four licenses allow commercial use and redistribution.
Key difference: MPL-2.0 is a middle ground between permissive licenses (MIT/Apache-2.0) and strong copyleft (GPL): only modified MPL-covered files must remain open.

What is the patent license?
A patent license in an open-source license means contributors grant users permission to use any patents that would otherwise be needed to use their contributed code. This reduces patent-risk for adopters. Apache-2.0, MPL-2.0, and GPLv3 include explicit patent protections (with termination clauses if someone starts a patent lawsuit over the covered software), while MIT does not include an explicit patent grant.

Getting Started

Hardhat is the main development toolchain for this repository and for CMTAT. Forge (Foundry) is also installed and can compile the contracts, but Foundry-specific deployment scripts and Foundry-native test suites are maintained in a dedicated repository: CMTAT-Foundry.

# Install dependencies
npm install

# Compile contracts
npm run hardhat:compile

# Run all tests
npm run test

# Generate coverage report
npm run coverage

Documentation

Full specification, architecture details, module descriptions, and ERC compatibility tables are in doc/README.md. A short module/variant overview is in doc/SUMMARY.md.

Additional resources:

Technical guides

Focused, subsystem-level guides live in doc/technical/:

About

Reference Solidity implementation of the CMTAT security token framework developed by CMTA to tokenize financial instruments.

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Used by

Contributors

Languages