ERC-3643 vs ERC-1400 vs CMTAT: Security Token Standards

KEY TAKEAWAYS
- The real question is not which standard is best, it is where you want compliance to live: in the token, in a partition scheme, or in swappable modules.
- ERC-3643 enforces eligibility at transfer time through on-chain identity. That is its whole thesis, and its whole cost.
- ERC-1400 partitions a balance into tranches; CMTAT keeps a lean ERC-20 core with pause, snapshot and a validation hook. Neither builds in identity.
- Pick ERC-3643 when the regulator cares who holds the token, ERC-1400 when you need tranche-level lifecycle, CMTAT when you want ERC-20 simplicity with a compliance seam.
- ERC-7943 (uRWA) went Final on 5 May 2026, but its category is Interface, not a fourth system. It standardises the compliance vocabulary on top of whichever model you already picked.
A bank called me last year with a simple-sounding question. They'd picked a tokenization vendor, the vendor had picked a token standard, and now their compliance team wanted to know if that was the right call. It wasn't a code question. It was a five-year question wearing a code question costume.
So here's the honest comparison of the three standards that actually come up: ERC-3643, ERC-1400, and CMTAT. I'm one of the named authors of ERC-3643, so read me as biased and informed, not neutral. I'll be fair to the other two, because pretending they've got no place is how you lose the argument with a good engineer.
WHERE I STAND
Full disclosure: I'm one of five named authors of ERC-3643 (T-REX), and I built its compliant token suite and the OnchainID identity layer at Tokeny. Everything below about ERC-1400 and CMTAT is their public specification, not a number I'm asserting.
Getting there was its own multi-year fight; I broke down how you actually get an Ethereum standard accepted in the first episode.
The decision nobody warns you about
A security-token standard isn't a library you swap out next sprint. It decides who can hold the asset, how a regulator forces a freeze, and what your auditors have to reason about for the life of the instrument. Get it wrong and you're migrating a live cap table, which is roughly as fun as it sounds.
Month 0: you pick
It feels like a code choice. A vendor ships one standard, you say yes, and the transfer model is now set for the life of the instrument.
Integration: the choice hardens
Wallets, custody and your transfer agent all inherit that model. Every integration makes the decision more expensive to reverse.
First audit: the model is on trial
Auditors have to reason about your transfer path. A model that puts compliance where they can see it saves weeks; a bolted-on gate costs them.
A regulator event: freeze or prove
Someone asks you to freeze a holder or prove eligibility. Now you learn whether compliance lives somewhere the token can actually reach.
Year 5: migrate, or not
The instrument outlived the assumption, or it didn't. Either way, this is the bill for the choice you made in month 0.
What are ERC-3643, ERC-1400, and CMTAT?
All three let you issue a security token on an EVM chain. They disagree on the one thing that matters for a regulated asset: how the token decides whether a transfer's allowed.
The real fork: where does compliance live?
Forget the feature checklists for a second. All three standards ask the same question on every transfer. They just answer it in different places.
That single choice drives everything else: what data has to exist on-chain, what a regulator has to trust, how hard a freeze is, and how much your token contract has to know about the outside world. The standards differ on the location of the answer, not the difficulty of the question.
transfer() calls IdentityRegistry.isVerified; it reverts unless the receiver holds the claims the token requires.
canTransferByPartition gates each tranche, and a controller can force a move or redemption when the law demands it.
Every transfer must pass a validation module you implement; the standard only guarantees the hook is always called.
ERC-3643: identity is the whole thesis
ERC-3643 makes a bet: the token itself should refuse an ineligible transfer. Not a wrapper, not an off-chain gate you can forget to call. The transfer function asks an identity registry whether the receiver holds the claims this token requires, and reverts if they don't. Compliance isn't bolted on; it's the transfer path.
The claims live in an on-chain identity contract (in the T-REX design, OnchainID), signed by trusted issuers. Your passport never touches the chain. The chain only sees that some issuer you trust has attested "this address is allowed to hold this class of asset." That's the elegant part, and it's why the model earned its adoption.
The cost is honest and worth stating plainly. You're now running an identity system. Someone has to issue claims, rotate them, revoke them, and be online when an investor onboards. For a permissioned instrument that a regulator watches, that machinery is the point. For a token you wanted to be simple, it's overhead you'll resent.
Compliance as a gate you call
Compliance as the transfer itself
If you want the actual interface and its Final status, the ERC-3643 (T-REX) reference lays it out.
ERC-1400: partitions, and when they win
ERC-1400 isn't a worse ERC-3643. It's a different idea. It says a security is rarely one flat balance. It's tranches: locked and unlocked, Reg D and Reg S, vested and unvested. So it splits a holder balance into named partitions, each with its own transfer rules, and adds a controller role that can force a transfer or redemption when the law says it must.
That maps beautifully onto instruments with real lifecycle: lockups that expire, share classes that convert, corporate actions that move balances between buckets. If your compliance story is mostly "these tokens are restricted until date X and then they're not," partitions express that natively in a way ERC-3643 has to model around.
What ERC-1400 doesn't give you is identity. It assumes something upstream already decided who's allowed on the register. Pair it with a whitelist or an identity layer and you're close to ERC-3643 with extra tranche machinery. If you don't need the tranches, that machinery is complexity you're paying for and not using.
CMTAT: the lean, pragmatic option
CMTAT is the option engineers underrate because it looks boring, and boring is often correct. It's a Swiss framework (from the Capital Markets and Technology Association) built on a lean ERC-20 core with modules: pause the whole token, freeze an address, snapshot balances for a dividend or a vote, and a validation hook that every transfer must pass.
The philosophy is opposite to ERC-3643. Instead of building identity into the token, CMTAT gives you a clean seam and says "put your compliance logic here." That validation module can be a simple allowlist, or it can call out to something as strict as an identity registry. You choose the strictness; the standard just guarantees the hook is always called.
That's its strength and its warning. CMTAT is honest that it's a frame, not a full compliance system. The ERC-20 core means your token works with existing wallets and tooling on day one. But an empty validation module is a security token with no compliance, so the real work moves into code you own and must get right.
ERC-7943 (uRWA): an interface, not a fourth answer
There's a fourth name in this conversation now, and it isn't a fourth answer. ERC-7943, the Universal RWA interface (uRWA), went Final on 5 May 2026. Before you add it to the bake-off, read its category field. It says Interface.
It doesn't tell you where compliance lives. It extends ERC-20, ERC-721 and ERC-1155 with a shared vocabulary for the things every regulated token ends up doing anyway: freeze a balance, force a transfer when the law demands it, ask whether an address is allowed to send or receive.
Its motivation is blunt about why. Earlier attempts at a universal RWA standard, it says, imposed unnecessary complexity and gas overhead for simpler use cases that don't need mandatory on-chain whitelisting or a specific on-chain identity solution. It names nobody. Given that mandatory on-chain identity is precisely the ERC-3643 thesis, I'll take the hint.
The naming is deliberate too. The spec says it preferred canTransfer over isTransferAllowed for consistency with established RWA standards including ERC-3643. That is the useful part: an integrator learns one vocabulary instead of three.
So it doesn't change the choice this article is about. It changes what you expose once you've made it.
interface IERC7943Fungible {
function forcedTransfer(address from, address to, uint256 amount) external returns (bool result);
function setFrozenTokens(address account, uint256 amount) external returns (bool result);
function canSend(address account) external view returns (bool allowed);
function canReceive(address account) external view returns (bool allowed);
function getFrozenTokens(address account) external view returns (uint256 amount);
function canTransfer(address from, address to, uint256 amount) external view returns (bool allowed);
}So which one should you pick?
Strip away the tribalism and the decision isn't that hard. Match the standard to the shape of your compliance problem, not to whichever one your vendor already ships.
The same "where does the rule live" question shows up in agent payments and who's liable when one goes wrong, later in this series.
Three ways this goes wrong in production
ERC-3643 is only as good as the issuer that signs claims. Teams pick it for the compliance story, then treat claim issuance as a side project. Onboarding stalls, claims expire, transfers revert, and support blames the chain. The token was fine; the human process behind the claims wasn't staffed.
ERC-1400 is tempting because it looks complete. But if every holder only ever has one default partition, you shipped a tranche engine to model a flat balance. Now every integrator has to reason about partitions that never differ, and every audit covers code paths you never exercise.
CMTAT will happily let you deploy with a validation module that returns true for everything. It compiles, it passes tests, it moves tokens. It's also a security token with zero compliance, and nobody notices until a transfer that should've been blocked isn't. The seam is only as strong as what you put in it.
FAQ
Neither one is better in the abstract. ERC-3643 enforces holder eligibility at transfer time through on-chain identity, which is what you want when the regulator cares who owns the token. ERC-1400 models an asset whose balance is split into tranches with their own rules, which is what you want for lifecycle events like lockups or corporate actions. Choose by the problem you've actually got.
In practice you pick one as the transfer-control model, because both want to own the transfer path. You can borrow ideas across them, say adding an identity check to an ERC-1400 token, but running both control layers on the same token means two systems can each veto a transfer, and that's a support and audit burden you'll rarely want.
CMTAT (Capital Markets and Technology Association Token) is a Swiss framework built on a lean ERC-20 core with modules for pausing, freezing, snapshots, and a validation hook that a transfer must pass. It's for issuers who want ERC-20 tooling compatibility and a clear place to plug compliance in, without adopting a full on-chain identity system.
It requires an on-chain identity claim, not your passport on-chain. In the T-REX design the identity contract holds signed claims from trusted issuers, and the token checks that a receiver's got the claims it requires before it'll move. The personal data stays off-chain with the claim issuer; the chain only sees that a valid claim exists.
ERC-7943, the Universal RWA interface, went Final on 5 May 2026, and its category is Interface rather than a full system. It extends ERC-20, ERC-721 and ERC-1155 with a shared set of compliance functions: canTransfer, canSend, canReceive, forcedTransfer and frozen-token accounting. Its stated goal is an essential interface that doesn't dictate the underlying implementation mechanisms, and it says it chose the name canTransfer for consistency with established RWA standards including ERC-3643. So it isn't a fourth option in this comparison. It's the vocabulary you can expose once you've picked your model.
ERC-3643 is a Final Ethereum standard. It's the T-REX suite I helped author at Tokeny, it underpins more than $32B in tokenized assets, and it's been cited by name by the SEC Chairman. That maturity is the main reason it's a low-risk default for regulated security tokens today.
Enjoyed this post?
Get more like it in your inbox every Tuesday.
