This document explains how CMTAT implements ERC-3643 semantics, where it intentionally diverges from the T-REX profile, and how the implementation is composed across modules and deployment variants.
Reference specification used for comparison: doc/ERCSpecification/erc-3643-trex.md.
CMTAT implements a substantial ERC-3643-compatible token surface (pause, freeze, partial freeze, forced transfer, mint/burn, batch operations, compliance pre-checks), but it does not embed the full T-REX identity stack (IdentityRegistry, TrustedIssuersRegistry, ClaimTopicsRegistry, onchainID plumbing). Instead, CMTAT externalizes transfer eligibility/compliance to a configurable RuleEngine/validation architecture and uses RBAC roles instead of the Owner/Agent governance model described in T-REX.
Primary CMTAT interface:
Implemented ERC-3643-related interface groups in CMTAT:
IERC3643PauseIERC3643ERC20BaseIERC3643BatchTransferIERC3643VersionIERC3643EnforcementandIERC3643EnforcementEventIERC3643ERC20EnforcementIERC3643MintIERC3643BurnIERC3643ComplianceReadIERC3643IComplianceContract(implemented by RuleEngine side, not token side)
- ERC-20 compatibility: implemented.
- On-chain identity system mandatory: not implemented in-core (intentional gap).
- Compliance rules on transfers: implemented through RuleEngine/validation hooks.
- Standard pre-check before transfer: implemented (
canTransferand related checks). - Recovery system (lost key): not implemented in core CMTAT.
- Freeze wallet / partial freeze: implemented.
- Pause token: implemented.
- Mint and burn: implemented.
- Agent + Owner role model: replaced by granular RBAC roles.
- Forced transfers by privileged operator: implemented.
- Batch operations: implemented (batch mint/burn/transfer/freeze operations depending on module).
Core ERC-3643 behavior is split across wrapper modules:
-
Pause:
- PauseModule.sol
- Implements
pause,unpause,paused.
-
Token metadata updates:
- TokenAttributeModule.sol
- Implements
setName,setSymbol(moved out ofERC20BaseModuleintoTokenAttributeModule, with their own ERC-7201 storage;ERC20BaseModulenow holds onlydecimals).
-
Mint / batch mint / ERC-3643 batch transfer path:
- ERC20MintModule.sol
batchTransferis role-gated and mapped to internal minter-transfer flow.
-
Burn / batch burn:
-
Address freeze:
- EnforcementModule.sol
- Implements
setAddressFrozen,batchSetAddressFrozen,isFrozen.
-
Partial freeze and forced transfer:
- ERC20EnforcementModule.sol
- Implements
freezePartialTokens,unfreezePartialTokens,forcedTransfer,getFrozenTokens.
-
Compliance pre-check surface:
- ValidationModuleCore.sol
- Implements
canTransfer; integrates with generic validation path.
From deployment composition, ERC-3643 functionality is not all-or-nothing across every variant.
-
Standard (
CMTATStandardStandalone,CMTATStandardUpgradeable):- Includes the main ERC-3643-compatible tokenization surface (without T-REX identity stack).
-
Light:
- Reduced surface; intended minimal feature set.
-
Allowlist / Debt / DebtEngine / Snapshot / ERC-7551 / ERC-1363 / Permit:
- Inherit different subsets/extensions; ERC-3643-related behavior is preserved where inherited modules remain in the chain.
For exact variant inheritance, see doc/SUMMARY.md and the deployment table in doc/README.md.
-
Identity architecture omitted in-core. CMTAT does not natively expose T-REX token getters/setters like
identityRegistry(),compliance(),setIdentityRegistry(),setCompliance(),onchainID(), or identity-registry contract suite APIs. -
Governance model differs. T-REX relies on Owner/Agent role conventions; CMTAT uses granular
AccessControlroles (admin, minter, burner, enforcers, etc.). -
Compliance integration model differs. T-REX couples token and compliance/identity contracts in a canonical stack; CMTAT uses pluggable RuleEngine/validation modules and can operate without on-chain identity.
-
Extended events and overloads. CMTAT emits additional events and supports extra overloads (for example
bytes datain several flows), which are beyond the strict minimal ERC-3643 interface profile. -
batchTransfersemantics. CMTAT models ERC-3643batchTransferthrough minter-controlled transfer logic; this is not identical to every T-REX token implementation assumption and should be treated as CMTAT policy design. -
Freeze event layering. At base level (ERC-7943 enforcement core), CMTAT uses
Frozen(account, amount)as a normalized frozen-state update event for both increase and decrease of frozen balances. For ERC-3643 direction semantics, wrapper modules emitTokensFrozenandTokensUnfrozen. Integrations requiring freeze/unfreeze direction should consume ERC-3643 (or ERC-7551) directional events.
If strict T-REX parity is required, a dedicated deployment variant should add:
- token-level identity/compliance contract bindings (
identityRegistry,compliance,onchainID), - identity-registry stack contracts and wiring,
- recovery flows (
recoveryAddress) and associated history/events, - any missing batch administrative functions expected by a target T-REX integration.
If the objective is regulated transfer control without on-chain identity, current CMTAT architecture is intentional and already provides strong compliance hooks.
- ERC-3643 reference: erc-3643-trex.md
- CMTAT partial interface: IERC3643Partial.sol
- Main README ERC-3643 section: doc/README.md