← Protocols
ERC-1400 — Security Token Standard
Standard / EIP·EVM

ERC-1400 — Security Token Standard

01Description

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.

02Best for
  • 01regulated equity / debt tokens
  • 02tokenized real-world assets
  • 03transfer-restricted issuances
  • 04KYC/AML-gated investor registries
  • 05on-chain shareholder registers
03Install
  • git clone https://github.com/SecurityTokenStandard/EIP-Spec
  • git clone https://github.com/PolymathNetwork/polymath-core
  • git clone https://github.com/TokenySolutions/T-REX
05Prompt snippet
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.
06Gotchas
  • 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.
07Alternatives