ERC-1400: стандарт security-токенов. Партиции, контроль переводов, документы и роль трансфер-агента

ERC-1400 — это семейство интерфейсов для токенов, которые отражают право собственности на реальный или бумажный актив (ценные бумаги, доли SPV, паи фондов и пр.). В отличие от «чистых» ERC-20, здесь важнее не только баланс, но и правила оборота: кому разрешено держать токен, при каких условиях можно перевести, как оформлять корпоративные действия, где хранится регламент выпуска.

ERC-1400 в RWA: право ↔ ончейн-учёт, партиции и проверка оборота

Стандарт не один: под «зонтиком» 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 нужен именно ERC-1400

RWA-токен — это не просто «жетон». Он закрепляет право, а значит:

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 в RWA: что это, как попасть в список, как работают ограничения и что проверять инвестору. Эмитент/агент вызывает issue/issueByPartition — токены появляются у инвестора в нужной партиции (напр., PARTITION_US_QUALIFIED).

2) Перевод (вторичка/P2P). Перед transfer/transferByPartition вызывается логика проверки: canTransfer(from, to, amount, data)OK или reason code. Проверяются whitelist, гео/категории, lock-up, лимиты.

3) Корпоративные действия. Купоны/дивиденды/амортизация/конверсии — через учёт по партициям и списки держателей на *record date*. Документы/анонсы крепят через ERC-1643. Детали — Трансфер-агент и реестр держателей RWA: как устроены корпоративные действия, выкуп и синхронизация с блокчейном, Как читать отчёты по RWA: NAV, резервы, аудиты и корпоративные действия — полный гид для инвестора.

4) Погашение/выкуп. redeem/redeemByPartition: токены списываются, дальше — расчёт денег/поставки по регламенту, см. Редемпшн RWA: как вывести деньги или получить актив — пошаговый гид, комиссии, сроки и риски.

5) Инциденты. При фроде/суде/санкциях — *freeze*, затем controllerTransfer/controllerRedeem (ERC-1644) по документам TA. Политики и роли — Админ-ключи и апгрейды в RWA: pause/freeze/wipe, прокси-контракты, timelock и мультисиг — полный гид.

Партиции (ERC-1410): зачем и как их проектировать

Партиция — это «карман» внутри одного токена. Баланс хранится по множеству партиций, а не одним числом.

Типовые схемы:

Что решить заранее:

  1. Правила конверсии между партициями (сняли lock-up → перенос баланса).
  2. Разделение прав на выплаты по классам (A/B shares).
  3. Согласование партиций с реестром TA (offchain-истина).

Плюсы: гибкость комплаенса без выпуска десятков токенов. Минусы: усложнение UX/отчётности; нужно учить фронт-энд читать balanceOfByPartition.

Проверки перед переводом: canTransfer и reason codes

ERC-1594 вводит предварительную проверку. Вместо того чтобы «ловить» ошибку в середине транзакции, контракт может вернуть код причины отказа, объясняющий, что не так:

  • 0x50 (Transfer Verified) — ок.
  • 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 → фронт-энд и аудиторы видят историю.

Зачем это в ончейне:

Управляемые трансферы (ERC-1644): границы и безопасность

controllerTransfer/controllerRedeem дают контролёру (эмитент/TA) возможность принудительного перевода/погашения, когда этого требует закон или защита прав инвесторов:

  • Восстановление права при краже/утрате доступа (после *freeze* и проверки документов).
  • Исполнение судебного акта/санкционного предписания.
  • Техническая коррекция при сбое мостов/миграции.

Требуйте:

Совместимость с ERC-20 и влияние на UX

Большинство реализаций ERC-1400 реализуют и интерфейс ERC-20, чтобы не ломать кошельки/обменники/обозреватели. Но:

  • Баланс на экране кошелька может не учитывать партиции. Для точности фронт-энд должен читать partitionsOf(holder) и суммировать balanceOfByPartition.
  • transfer может фейлиться из-за правил (даже при «достаточном» балансе). UX должен уметь показать причину (reason code).
  • Для whitelisted-DEX/ATS добавляются _off-chain_ проверки адресов.

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 Часто «переезд» на готовый стек
Партиции Сильная сторона (1410) Есть классы/правила соответствия
Документы 1643 в стандарте Есть механизмы метаданных/ссылок
Контролируемые трансферы 1644 Аналог в Compliance/Controller
Экосистема инструментов Разнородная Богатые готовые SDK/реестры

Практичный совет: Если у вас исторический выпуск/кастомный стек — расширяйте ERC-20 до ERC-1400 (минимум 1594+1410). Если строите с нуля и хотите «из коробки» реестр идентичностей, — смотрите Erc 3643. Оба подходят для RWA, важнее процессы TA и комплаенса.

ERC-1400 и ERC-4626: когда комбинировать

Для пулов/фондов часто используют Erc 4626, который описывает «сейф» (доли ↔ активы, totalAssets, convertToShares). Сочетание:

  • 4626 отвечает за экономику долей,
  • 1400 — за доступ/партиции/правоприменение.

Такой гибрид удобен для приватного кредита/портфелей: deposit/mint с проверкой адреса и партиции; выплаты купонов/амортизации учитывают классы.

Мультичейн и мосты: как не потерять право

Партиции удобны для маркировки «сетевых» классов, но право определяется реестром держателей у TA. При переносе:

Роли, паузы и апгрейды: операционная дисциплина

ERC-1400 не навязывает конкретную «схему ключей», но практика RWA требует:

Паттерны интеграции (для разработчиков)

Шлюз подписки. Фронт-энд «узнаёт» партицию инвестора по его профилю (регион, категория) и вызывает issueByPartition. Перед транзакцией — canTransfer на «сухую» проверку.

Whitelisted-DEX. Пулы проверяют isWhitelisted(msg.sender) на вход/выход; для разных партиций — разные пулы/рынки или «конверсия перед свопом».

ATS/OTC. Сделка проходит у брокера/TA, затем OTC-сервис вызывает controllerTransfer/transferByPartition и обновляет реестр.

Документы и анонсы. Новый отчёт/регламент → setDocument с URI и хэшем → событие DocumentUpdated → лента анонсов на сайте/в блок-обозревателе.

Частые ошибки внедрения

FAQ

Можно ли обойтись без партиций и просто «чёрно-белым» списком? Можно, но вы потеряете гибкость: юрисдикции/категории/lock-up лучше размечать партициями, иначе быстро придёте к «зоопарку» токенов.

Зачем хранить документы на контракте, если есть сайт? Ончейн-ссылка и хэш — способ доказать, какая версия действовала в момент операции. Сайт можно поменять, ончейн-событие — нет.

ERC-1644 — это «централизация»? Это инструмент правоприменения для security-подобных RWA. Риском станет только при отсутствии прозрачной политики и ограничений ролей. Требуйте мультисиг и timelock.

ERC-1400 конфликтует с ERC-20? Нет. Реализация обычно включает ERC-20 API. Но UX должен учитывать партиции и отказ по правилам.

Чем 1400 отличается от 3643 в повседневной работе? 3643 предлагает готовый фреймворк идентичностей/комплаенса; 1400 — более «конструктор». Выбирайте, исходя из требуемой степени готовности и экосистемы инструментов.

См. также

Task Runner