A private version of the CMTAT security token, written in Noir / Aztec.nr for the Aztec privacy Layer 2 on Ethereum.
Balances and transfers are private: a holder's balance is a set of encrypted notes in their own client, and a transfer publishes neither the parties nor the amount. Compliance state stays public: total supply, the pause and deactivation flags, the role table, the freeze flags and the transfer-restriction lists. The issuer receives a copy of every note and a constrained Transfer event, so it can reconstruct every balance and audit activity without any user's cooperation.
Repository. Since v0.3.0 the project is maintained and released by the Capital Market and Technology Association at github.com/CMTA/private-CMTAT-aztec. Releases 0.1.0 to 0.2.0 were published by Taurus SA at github.com/taurushq-io/private-CMTAT-aztec, whose history this repository carries.
Disclaimer. This is a prototype. It has not been audited, it is not upgradeable, it has no gasless-transaction support, and it may not be fully compliant with Swiss law. Aztec itself is under heavy development; expect breaking changes between toolchain versions.
- Deployment variants
- Features
- Quick start
- Repository layout
- Documentation
- Intellectual property
- Security policy
Noir has no inheritance and allows one contract per package, so the variants are separate contract packages composing modules from one shared library (lib/), built together as a Nargo workspace.
| Variant | Contents |
|---|---|
CMTATAztecLight |
Private token, pause, deactivation, freeze, access control, terms, version — no transfer-restriction lists |
CMTATAztec |
The above plus the validation module (blacklist / whitelist) |
CMTATAztecDebt |
The above plus credit events and debt, for bond-like instruments |
- Private mint, transfer and burn, in single and batched form, with authwits in place of ERC-20 allowances.
- Public pause (immediate) and permanent deactivation, following the CMTAT Solidity semantics: a pause stops transfers only; deactivation stops everything, forever.
- Freeze of individual accounts and transfer restriction by blacklist or whitelist, screening both parties of a transfer, the recipient of a mint and the account of a burn.
- Issuer auditability: an audit copy of every note and a constrained, unforgeable
Transferevent to the issuer; the issuer address can be rotated withset_issuer. - Role-based access control with the CMTAT role set, plus CMTAT terms / token ID, and, on the debt variant, credit events and the
ICMTATDebtrecord. - Events for every state change, public where the state is public and private (encrypted to the parties) for transfers.
Not supported, unlike Solidity CMTAT: upgradeability, gasless transactions, and forced transfer (the issuer cannot move a holder's notes; the compliance lever is freezing the account).
Install the Aztec toolchain at the version pinned in Nargo.toml and package.json:
bash -i <(curl -s https://install.aztec.network)
aztec-up install 5.2.0Start a sandbox in one terminal, then build and run every test in another:
aztec start --sandboxyarn install
yarn compile # aztec compile --workspace: all three variants
yarn codegen # TypeScript artifacts for the e2e suite and the scripts
yarn test # Noir suite (aztec test --workspace) then the Jest e2e suiteyarn test:nr runs the Noir suite alone and needs no sandbox. For the testnet scripts (yarn deploy, yarn interaction, …) copy .env.example to .env first; see Deployment in the technical documentation.
lib/ cmtat_aztec_lib — every CMTAT module (access control, pause, enforcement,
validation, extra information, credit events, debt)
test-helpers/ cmtat_aztec_test_helpers — test scaffolding shared by the Noir suites
contracts/
cmtat-aztec/ CMTATAztec, with the full Noir test suite
cmtat-aztec-debt/ CMTATAztecDebt
cmtat-aztec-light/ CMTATAztecLight
src/ TypeScript: generated artifacts, e2e tests, PXE / account helpers
scripts/ Testnet scripts (deploy, interact, fees, profiling)
doc/ Technical documentation, diagrams, standards analyses, assessment, audits
- Technical documentation — the full specification: assumptions and privacy requirements, the private/public split of each operation with sequence diagrams, batching limits, the event list, what each operation publishes, the module design, deployment, the comparisons with Solidity CMTAT and with CMTAT-Confidential (Zama FHE), known limitations and a glossary.
CHANGELOG.md— release history, semver policy and the pre-release checklist.doc/standards/— how this token relates to Aztec's AIP-20 token standard: a detailed comparison, whether it could be built on theaztec-standardslibrary, used as an ARC-403 authorization contract, which AIP-20 features fit CMTAT, and how to upgrade the standards fork.doc/cmtat-assessment/— the CMTAT equivalency assessment of this implementation, criterion by criterion.doc/audits/tools/v0.3.0/CLAUDE_ANALYSIS.md— tool-assisted code-quality review against Aztec 5.2.0, with a measured gate-count baseline and the disposition of every finding.LEARN-AZTEC.md— Aztec / Noir notes written while building; background, not kept up to date.CLAUDE.md— the agent and contributor guide: key concepts, conventions and commands.
The code is copyright (c) Capital Market and Technology Association, 2026, and is released under the Mozilla Public License 2.0 and the MIT license. You may choose either license.
The history up to and including commit 61f4220d5565840fd4fcdd2b723c9f55eb824c60 (the 0.2.0 release, and so the 0.1.0, 0.1.1 and 0.2.0 releases) is copyright (c) 2025 Taurus SA, under the same two licenses. Later commits are copyright CMTA.
We are not aware of any patent or patent application covering the techniques implemented.
Please see SECURITY.md.