ERC-1400 — это семейство интерфейсов для токенов, которые отражают право собственности на реальный или бумажный актив (ценные бумаги, доли SPV, паи фондов и т.п.).
В отличие от «чистых» ERC-20, здесь важнее не только баланс, но и правила оборота: кому можно держать токен, при каких условиях его можно перевести, как оформляются корпоративные действия и где хранится регламент выпуска.
Под «зонтом» ERC-1400 живут четыре ключевых EIP:
- ERC-1594 (Core Security Token) — ядро правил выпуска/погашения и _pre-transfer_ проверок.
- ERC-1410 (Partially Fungible) — партиции: классы одного токена (по юрисдикции, категории, lock-up и т.п.).
- ERC-1643 (Document Management) — крепление документов выпуска к контракту (PPM/IM/Terms) с хэшами.
- ERC-1644 (Controller Transfers) — управляемые переводы по решению эмитента/агента для правоприменения.
База по теме RWA: обзор RWA-кластера. Доступ и оборот: access control и whitelist, выкуп долей: redemption, трансфер-агент и реестр: transfer agent, админ-ключи: admin controls. Связанные стандарты: ERC-3643, ERC-4626. Термины: KYC, AML, whitelist.
Зачем RWA нужен именно ERC-1400
RWA-токен — это не просто «жетон», а цифровая запись права. Отсюда требования:
- Нужна идентификация держателя (KYC/KYB), гео-ограничения, категории инвесторов — см. доступ и оборот RWA.
- Нужны управляемые трансферы в особых случаях: фрод, судебный запрет, утрата доступа к кошельку — см. админ-контроль.
- Важно различать классы прав одного выпуска (A/B, регионы, lock-up) — это делают партиции (ERC-1410).
- Регламенты и раскрытие должны быть доступны и проверяемы — используются документы (ERC-1643).
ERC-1400 решает всё это модульно и при этом может оставаться совместимым с ERC-20 для базовых операций и интеграций.
Карта семейства ERC-1400
| Подстандарт | За что отвечает | Ключевые вызовы/события | На заметку |
|---|---|---|---|
| ERC-1594 (Core) | Выпуск/погашение, ограничения оборота, pre-transfer-проверки | canTransfer, issue, redeem, коды причин отказа | Основа «правил» токена |
| ERC-1410 (Partitions) | Классы/партиции внутри одного токена | transferByPartition, balanceOfByPartition, ChangedPartition | Чётко размечает права по категориям |
| ERC-1643 (Docs) | Документы выпуска с хэшами и метаданными | setDocument, getDocument, DocumentUpdated | Привязывает PPM/IM/Terms к контракту |
| ERC-1644 (Controller) | Управляемые переводы/отзыв по решению контролёра | controllerTransfer, controllerRedeem | Для правоприменения в исключениях |
На практике конкретная реализация может включать не все подстандарты, но ядро 1594 и партиции 1410 — самые частые.
Как выглядят процессы на ERC-1400
1. Подписка (выпуск)
- Инвестор проходит KYC/KYB; его адрес попадает в whitelist.
- Эмитент или трансфер-агент вызывают issue/issueByPartition.
- Токены появляются у инвестора в нужной партиции, например PARTITION_US_QUALIFIED.
2. Перевод (вторичка / P2P)
Перед transfer или transferByPartition вызывается логика проверки:
- canTransfer(from, to, amount, data) → «OK» или код причины отказа.
- Проверяются whitelist, гео-ограничения, категория инвестора, lock-up, лимиты.
3. Корпоративные действия
- Купоны, дивиденды, амортизация, конверсии учитываются по партициям и спискам держателей на *record date*.
- Документы и анонсы крепятся через ERC-1643.
- Детали процессов — на страницах трансфер-агент и как читать отчёты и NAV.
4. Погашение / выкуп
- redeem/redeemByPartition списывают токены.
- Денежный расчёт и поставка базового актива происходят по офчейн-регламенту выпуска.
- Общая логика описана в редемпшн (выкуп).
5. Инциденты
- При фроде/суде/санкциях токены могут быть заморожены (freeze).
- После процедур проверки TA использует controllerTransfer или controllerRedeem (ERC-1644).
- Политики и роли описываются в админ-контроле.
Партиции (ERC-1410): зачем и как их проектировать
Партиция — это отдельный «карман» внутри одного токена. Баланс держателя хранится не одним числом, а как сумма по нескольким партициям.
Типовые схемы:
- Юрисдикции: EU_PRO, US_QIB, ROW_RETAIL_LIMITED.
- Категории инвесторов: QUALIFIED, ACCREDITED, RETAIL_LOCKED.
- Статусы/окна: LOCKUP_6M, FREELY_TRANSFERABLE.
- Сети/каналы при мультичейне и мостах — подробнее в обзоре мостов для RWA.
Что нужно решить заранее:
- Правила конверсии между партициями (сняли lock-up → перенос баланса).
- Разделение прав на выплаты по классам (A/B-акции и т.п.).
- Согласование партиций с офчейн-реестром держателей у трансфер-агента.
Плюс: высокая гибкость комплаенса без выпуска десятков отдельных токенов. Минус: усложнение UX и отчётности; фронтенд и бэкенд должны правильно работать с balanceOfByPartition.
Проверки перед переводом: canTransfer и reason codes
ERC-1594 вводит предварительную проверку, чтобы заранее понять, пройдёт ли перевод. Вместо «тихого» фейла посреди транзакции контракт возвращает код причины отказа:
- 0x50 — *Transfer Verified* (OK).
- 0x51 — *Insufficient Balance* (не хватает токенов или неверная партиция).
- 0x52 — *Insufficient Allowance* (оператору не выдано право).
- 0x53 — *Transfer Blocked* (нарушены правила: нет в whitelist, запрещённая гео/категория, lock-up).
- 0x54 — *Identity Restriction* (идентичность/статус не подходит).
- 0x55 — *Partition Restriction* (нельзя так перевести между партициями).
Конкретный набор кодов зависит от реализации, но идея одна: объяснить отказ, чтобы инвестор, фронты и интеграторы понимали, что исправлять (KYC, партиция, окно и т.д.).
Документы выпуска на контракте (ERC-1643)
Чтобы не спорить, «какая версия условий действовала», стандарт позволяет «прикрепить» регламент выпуска к контракту:
- setDocument(name, uri, documentHash) — добавить или обновить документ (например, PPM_v1.2 с URI на хостинг/IPFS и хэшем).
- getDocument(name) — вернуть актуальную версию.
- События DocumentUpdated дают прозрачный чейнджлог для наблюдателей и аудиторов.
Зачем это ончейн:
- Прозрачность: любой может проверить, какая версия документа актуальна.
- Снижение споров: у реестра держателей и контракта одна и та же ссылка на условия.
- Удобство Due Diligence — см. проверка RWA-проекта.
Управляемые трансферы (ERC-1644): границы и безопасность
controllerTransfer и controllerRedeem дают контролёру (эмитенту или трансфер-агенту) возможность принудительного перевода или погашения, когда этого требует закон или защита прав инвесторов:
- восстановление прав при краже/утрате доступа к кошельку (после freeze и проверки документов);
- исполнение судебного акта или санкционного предписания;
- техническая коррекция при сбое мостов или миграции токена.
Хорошая практика:
- иметь публичную политику применения (когда, кто, по каким основаниям);
- использовать мультисиг и timelock для критических ролей — см. админ-контроль и ключи;
- логировать ключевые события и анонсы, чтобы инвесторы видели историю.
Совместимость с ERC-20 и влияние на UX
Большинство реализаций ERC-1400 также реализуют интерфейс ERC-20, чтобы:
- не ломать кошельки, обменники и блок-обозреватели;
- дать базовую совместимость с DeFi-инфраструктурой.
Но есть нюансы:
- Баланс в кошельке может не учитывать партиции: фронтенд должен получать список партиций (partitionsOf(holder)) и суммировать balanceOfByPartition.
- transfer может не проходить из-за правил комплаенса даже при «достаточном» балансе. UX должен уметь показать причину (reason code).
- Для whitelisted-DEX/ATS добавляются офчейн-проверки адресов и статусов инвесторов.
ERC-1400 vs ERC-3643: что выбрать под проект
ERC-3643 (T-REX) — более «современный» стандарт, который делает акцент на реестр идентичностей и модуль соответствия (Identity Registry, Compliance). В нём многие практики, «размазанные» по семейству 1400, сведены в цельную архитектуру.
| Критерий | ERC-1400 | ERC-3643 |
|---|---|---|
| Подход | Модульная семья (1594/1410/1643/1644) | Композит с явной Identity Registry/Compliance |
| Миграция старых выпусков | Проще «докрутить» к уже существующему ERC-20 | Часто переезд на готовый стек |
| Партиции | Сильная сторона (ERC-1410) | Есть классы и правила соответствия |
| Документы | ERC-1643 в стандарте | Есть механизмы метаданных и ссылок |
| Контролируемые трансферы | ERC-1644 | Аналог в модуле Compliance/Controller |
| Экосистема инструментов | Разнородная | Богатые готовые SDK и реестры |
Практичный подход:
- если у вас исторический выпуск или кастомный стек, удобнее расширить ERC-20 до ERC-1400 (минимум 1594+1410);
- если строите с нуля и хотите «из коробки» реестр идентичностей и комплаенса, смотрите в сторону ERC-3643.
Оба варианта подходят для RWA; важнее качество процессов у трансфер-агента и комплаенс-команды.
ERC-1400 и ERC-4626: когда комбинировать
Для пулов и фондов часто используют ERC-4626, который описывает сейф (dоли ↔ активы, totalAssets, convertToShares). Сочетание:
- ERC-4626 отвечает за экономику долей (NAV, вход/выход, комиссии),
- ERC-1400 — за доступ, партиции и правоприменение.
Такой гибрид удобен для приватного кредита и портфельных RWA-продуктов:
- deposit/mint сопровождаются проверкой адреса и партиции;
- выплаты купонов, амортизация и конверсии учитывают классы инвесторов и локапы;
- редемпшн реализуется через redeemByPartition и процедуры выкупа.
Мультичейн и мосты: как не потерять право
Партиции удобно использовать для маркировки «сетевых» классов, но право в конечном итоге определяется реестром держателей у трансфер-агента.
При мультичейне:
- используйте только официальные мосты и маршруты — см. мосты и мультичейн для RWA;
- адрес в целевой сети должен быть в whitelist;
- логи burn/mint и конверсии партиций должны сходиться с офчейн-реестром;
- на *record date* TA агрегирует держателей по сетям и партициям.
Подробный разбор рисков мостов — на странице риски RWA-мостов.
Роли, паузы и апгрейды: операционная дисциплина
Сам стандарт не навязывает схему ролей, но для RWA-выпуска обычно требуется:
- разделить роли: owner/upgrader, pauser, freezer, controller, documentAdmin;
- повесить timelock на апгрейды и критические изменения конфигурации;
- держать ключи на мультисиге (M-of-N), желательно с кастоди или MPC-хранением;
- вести публичные логи Upgraded, RoleGranted, Paused и т.п. — см. админ-контроль и ключи.
Паттерны интеграции (для разработчиков)
- Шлюз подписки.
Фронт узнаёт партицию инвестора по профилю (регион, категория) и вызывает issueByPartition. Перед транзакцией делает «сухую» проверку через canTransfer.
- Whitelisted DEX/ATS.
Пулы проверяют статус адреса на вход/выход; для разных партиций можно держать отдельные рынки или делать конверсию партиции перед свопом.
- OTC-сделки.
Сделка согласуется у брокера/TA, после чего вызывается controllerTransfer/transferByPartition и обновляется реестр.
- Документы и анонсы.
Новый отчёт или обновлённый регламент → setDocument с URI и хэшем → событие DocumentUpdated → лента анонсов на сайте и в блок-обозревателе.
Частые ошибки внедрения
- Сумбур с партициями: не определили правила конверсий — инвесторы «залипают» в LOCKUP_*.
- Нет reason codes: пользователи видят просто «ошибка», а не причину отказа.
- Документы только на сайте: споры, какая версия PPM действовала.
- Один ключ управляет всем: высокий риск злоупотребления или взлома.
- Неофициальный мост: ончейн-токен перекинулся, а реестр держателей этого не признаёт.
- Игнор трансфер-агента: контракт пропускает перевод, а TA блокирует в реестре.
Все эти проблемы решаются дизайном партиций, корректной реализацией canTransfer, использованием setDocument, мультисигом и чёткими процессами у трансфер-агента.
FAQ
Можно ли обойтись без партиций и только whitelist/blacklist? Можно, но вы потеряете гибкость. Юрисдикции, категории инвесторов, lock-up и классы прав гораздо удобнее размечать партициями, чем плодить десятки отдельных токенов.
Зачем хранить документы на контракте, если есть сайт? Ончейн-ссылка и хэш — способ доказать, какая версия документа действовала в момент операции. Сайт можно тихо обновить, ончейн-событие изменить нельзя.
ERC-1644 — это «централизация»? Это инструмент для правоприменения в security-подобных RWA. Риском он становится, если нет прозрачной политики, мультисига и timelock. Требуйте этих ограничений у эмитента.
Конфликтует ли ERC-1400 с ERC-20? Нет. Реализация обычно включает ERC-20 API. Но UX и интеграторы должны учитывать партиции и возможные отказы по правилам комплаенса.
Чем ERC-1400 отличается от ERC-3643 в повседневной работе? ERC-3643 предлагает более цельный фреймворк идентичностей и комплаенса «из коробки». ERC-1400 — скорее конструктор из модулей. Выбор зависит от того, что у вас уже есть и какую экосистему инструментов вы хотите использовать.
