Draft ERC suite (1410 partially-fungible tokens, 1594 transfer restrictions, 1643 document management, 1644 controller operations) for regulated security tokens. Reference implementations include Polymath's original ERC-1400 contracts and Tokeny's T-REX (ERC-3643) successor pattern.
- 01regulated equity / debt tokens
- 02tokenized real-world assets
- 03transfer-restricted issuances
- 04KYC/AML-gated investor registries
- 05on-chain shareholder registers
- git clone https://github.com/SecurityTokenStandard/EIP-Spec
- git clone https://github.com/PolymathNetwork/polymath-core
- git clone https://github.com/TokenySolutions/T-REX
Implement the IERC1400 surface: partition-aware balances and transfers (`balanceOfByPartition`, `transferByPartition`, `partitionsOf`) from ERC-1410; transfer-validation hooks (`canTransfer`, `canTransferByPartition` returning `(bytes1 statusCode, bytes32 reason, bytes32 partition)`) from ERC-1594; document anchoring (`setDocument`, `getDocument`) from ERC-1643; and controller forced-transfer / redemption (`controllerTransfer`, `controllerRedeem`) from ERC-1644. Issue and redeem against partitions for share classes (e.g. `keccak256('lockedReg-D')`). For new builds, prefer Tokeny's T-REX (ERC-3643) which embeds an `IIdentityRegistry` for on-chain KYC; Polymath's original codebase is the canonical historical reference.
- ⚑Partitions are not balances of separate tokens — `balanceOf` returns the sum across partitions; integrators that read `balanceOf` and ignore partitions will mis-route transfers between locked and unlocked tranches.
- ⚑`canTransfer` status codes follow ESC (ERC-1066) bytes1 codes — returning a freeform revert reason instead of `0x51`/`0x50` etc. breaks compliance UIs that decode the byte.
- ⚑Controller operations (`controllerTransfer`, `controllerRedeem`) are emergency overrides; if `isControllable()` returns true forever, the token is not truly bearer-style, which conflicts with some legal opinions — many issuers freeze controllability post-issuance.
- ⚑ERC-1400 itself does not specify KYC — investor whitelisting must be enforced inside the transfer-validation hook, typically via an external `IIdentityRegistry` (the T-REX/ERC-3643 pattern).
- ⚑The standard remains Draft / never finalized — production deployments fragmented into ERC-3643 (T-REX), ERC-1404 (simple restrictions), and proprietary forks; pick a target before integrating wallets.
- ⚑Document hashes (`setDocument`) anchor off-chain prospectuses on-chain — rotating documents without versioning the URI breaks regulator audit trails.