За 15 лет backend-разработки я прошёл путь от монолитных систем до распределённых архитектур. Последние годы специализируюсь на блокчейн-решениях, и security tokens — одна из самых технически интересных областей. Имплементировал оба стандарта в production: ERC-1400 для токенизации недвижимости, ERC-3643 для STO-проекта с листингом на regulated platform.

Выбор между этими стандартами — не просто техническое решение. Это архитектурный фундамент, который определит compliance-модель, gas costs, интеграционные возможности и upgradeability на годы вперёд.

В этой статье разберу оба стандарта с позиции практика: реальный код, метрики из production, конкретные рекомендации.

Почему ERC-20 не работает для security tokens

ERC-20 создавался для utility tokens с простым принципом: есть баланс — transfer проходит. Никаких ограничений, никаких проверок личности.

Security tokens — это цифровые ценные бумаги. Они подчиняются securities law. Каждый трансфер должен проверять:

  • Прошёл ли получатель KYC/AML

  • Является ли он аккредитованным инвестором (для US Reg D)

  • Не превышен ли лимит инвесторов в юрисдикции

  • Не нарушает ли трансфер transfer restrictions

  • Соблюдены ли holding periods (Rule 144)

ERC-20 не умеет ничего из этого. Поэтому индустрия разработала два подхода: ERC-3643 с on-chain compliance и ERC-1400 с hybrid-архитектурой.

Статус стандартов: критическое различие

ERC-3643 (T-REX Protocol) — разработан Tokeny Solutions, развивается с 2017 года. Предложен как EIP в 2021 году. Статус: Final (15 декабря 2023 года). Это первый и единственный permissioned token standard, официально принятый Ethereum community.

ERC-1400 — предложен в сентябре 2018 года консорциумом разработчиков (Polymath, Harbor, Securitize). Авторы: Adam Dossa, Pablo Ruiz, Stephane Gosselin, Fabian Vogelsteller. Статус: Draft. Стандарт так и не достиг Final status. Polymath, главный драйвер стандарта, мигрировал на собственный блокчейн Polymesh в 2021 году.

Это не формальность. Final status означает:

  • Код прошёл полный review процесс EIP

  • Стандарт заморожен и не будет меняться

  • Инструментарий и интеграции могут полагаться на стабильный интерфейс

Архитектурные подходы

ERC-1400: модульная библиотека стандартов

ERC-1400 — это umbrella для четырёх связанных ERC:

ERC-1400 (Security Token Standard)
    │
    ├── ERC-1410: Partially Fungible Token Standard
    │             (partitions/tranches)
    │
    ├── ERC-1594: Core Security Token Standard
    │             (issuance, redemption, transfer validation)
    │
    ├── ERC-1643: Document Management Standard
    │             (legal documents attachment)
    │
    └── ERC-1644: Controller Token Operation Standard
                  (forced transfers, recovery)

Ключевая особенность — partitions. Баланс держателя может быть разбит на подмножества с разными правилами:

// ERC-1410: Partially Fungible Token
interface IERC1410 {
    function balanceOfByPartition(
        bytes32 partition, 
        address tokenHolder
    ) external view returns (uint256);
    
    function partitionsOf(
        address tokenHolder
    ) external view returns (bytes32[] memory);
    
    function transferByPartition(
        bytes32 partition,
        address to,
        uint256 value,
        bytes calldata data
    ) external returns (bytes32);
}

Пример использования:

// Разные классы акций в одном контракте
bytes32 constant CLASS_A = keccak256("CLASS_A");  // Voting, dividends
bytes32 constant CLASS_B = keccak256("CLASS_B");  // No voting, 2x dividends
bytes32 constant FOUNDER_LOCKED = keccak256("FOUNDER_LOCKED_3Y");

// Инвестор может иметь токены в разных partitions:
// 100 tokens в CLASS_A (transferable)
// 50 tokens в FOUNDER_LOCKED (locked 3 years)
// Общий balanceOf() = 150, но transferable только 100

Transfer validation в ERC-1400 использует off-chain certificates:

function transferWithData(
    address to,
    uint256 value,
    bytes calldata data  // Certificate: salt, expiry, nonce, signature
) external;

// Certificate генерируется off-chain и подписывается issuer'ом
struct Certificate {
    bytes32 salt;
    uint256 expiry;
    uint256 nonce;
    bytes signature;  // Signed by issuer private key
}

ERC-3643: identity-centric compliance

ERC-3643 построен вокруг on-chain identity verification:

┌─────────────────────────────────────────────────────────────┐
│                    Token Contract (ERC-3643)                │
└─────────────────────┬───────────────────────────────────────┘
                      │
        ┌─────────────┼─────────────┬─────────────┐
        ▼             ▼             ▼             ▼
┌───────────────┐ ┌─────────────┐ ┌───────────┐ ┌──────────────┐
│   Identity    │ │Claim Topics │ │  Trusted  │ │  Compliance  │
│   Registry    │ │  Registry   │ │  Issuers  │ │   Contract   │
└───────┬───────┘ └─────────────┘ └───────────┘ └──────────────┘
        │
        ▼
┌───────────────┐
│  ONCHAINID    │  ← Децентрализованная идентификация
│  (per user)   │     инвестора (ERC-734/735)
└───────────────┘

Компоненты:

  • ONCHAINID — смарт-контракт идентификации пользователя. Хранит claims и ключи. Один ONCHAINID используется для всех ERC-3643 токенов.

  • Identity Registry — связывает wallet address с ONCHAINID и country code (ISO-3166).

  • Claim Topics Registry — список требуемых claim topics (KYC, accreditation, jurisdiction).

  • Trusted Issuers Registry — адреса доверенных claim issuers (KYC-провайдеры).

  • Compliance Contract — модульные правила: лимиты по странам, max holders, holding periods.

Transfer validation — полностью on-chain:

function transfer(address _to, uint256 _amount) 
    public override whenNotPaused returns (bool) 
{
    require(!_frozen[_to] && !_frozen[msg.sender], "Wallet frozen");
    require(_amount <= balanceOf(msg.sender) - _frozenTokens[msg.sender], 
            "Insufficient balance");
    
    // On-chain identity check
    require(_tokenIdentityRegistry.isVerified(_to), 
            "Identity not verified"); 
    
    // On-chain compliance check
    require(_tokenCompliance.canTransfer(msg.sender, _to, _amount), 
            "Compliance failure");
    
    _transfer(msg.sender, _to, _amount);
    _tokenCompliance.transferred(msg.sender, _to, _amount);
    return true;
}

Сравнение ключевых механизмов

Transfer Validation

Аспект

ERC-1400

ERC-3643

Подход

Off-chain certificate

On-chain validation

Где логика

Certificate server

Smart contracts

Single point of failure

Signing key

Trusted Issuers Registry

Гибкость изменений

Высокая (off-chain)

Требует contract update

Прозрачность

Низкая

Полная (on-chain audit trail)

Compliance Rules

ERC-1400 не стандартизирует compliance. Каждая имплементация решает по-своему. ConsenSys UniversalToken использует extension hooks:

interface IERC1400TokensValidator {
    function tokensToValidate(
        address token,
        bytes calldata payload,
        bytes32 partition,
        address operator,
        address from,
        address to,
        uint value,
        bytes calldata data,
        bytes calldata operatorData
    ) external;
}

ERC-3643 стандартизирует модульный Compliance contract:

// Пример: Country Restrictions Module
contract CountryRestrictionsModule is IModule {
    mapping(uint16 => bool) public restrictedCountries;
    
    function moduleCheck(
        address from,
        address to,
        uint256 amount,
        address compliance
    ) external view override returns (bool) {
        IToken token = IToken(IModularCompliance(compliance).getToken());
        uint16 receiverCountry = token.identityRegistry().investorCountry(to);
        
        return !restrictedCountries[receiverCountry];
    }
}

// Пример: Max Balance Module
contract MaxBalanceModule is IModule {
    uint256 public maxBalance;
    
    function moduleCheck(
        address from,
        address to,
        uint256 amount,
        address compliance
    ) external view override returns (bool) {
        IToken token = IToken(IModularCompliance(compliance).getToken());
        return token.balanceOf(to) + amount <= maxBalance;
    }
}

ERC-20 Compatibility

ERC-1400: Частичная совместимость. Стандартные transfer() и transferFrom() работают, но используют default partition. Wallets видят общий баланс, но не partitions.

ERC-3643: Полная backward compatibility с ERC-20. Все функции работают, но трансферы revert если compliance не пройден. Стандартные wallets и DEX работают корректно.

Controller Operations (Forced Transfers)

Оба стандарта поддерживают forced transfers для регуляторных требований:

// ERC-3643: Agent role
function forcedTransfer(
    address from,
    address to,
    uint256 amount
) external onlyAgent returns (bool) {
    // Agent может переводить без compliance checks
    _transfer(from, to, amount);
    emit ForcedTransfer(from, to, amount, msg.sender);
    return true;
}

// Recovery mechanism для lost keys
function recoveryAddress(
    address lostWallet,
    address newWallet,
    address investorOnchainID
) external onlyAgent returns (bool);

Практические метрики

Сложность деплоя

ERC-1400:

  • Контракты: 1-3 (монолитная архитектура)

  • Reference implementation (ConsenSys UniversalToken): ~2,500 LOC

  • External dependencies: Certificate generation server (off-chain)

ERC-3643:

  • Контракты: 8-15 (модульная архитектура)

  • T-REX implementation: ~5,000 LOC

  • External dependencies: Claim issuers (могут быть on-chain)

Gas Costs

Реальные метрики зависят от конкретной имплементации и сложности compliance rules. Общие наблюдения:

  • ERC-1400 с partitions требует дополнительных storage operations

  • ERC-3643 выполняет on-chain identity checks при каждом трансфере

  • Для high-frequency операций оба стандарта рекомендуется деплоить на L2 (Polygon, Arbitrum, Base)

ABN AMRO выпустил €5 млн green bond на Polygon именно для оптимизации gas costs.

Аудит и безопасность

ERC-3643

T-REX implementation:

  • Аудит Kaspersky — без критических findings

  • Аудит Hacken — оценка 10/10

  • Развитие с 2017 года, 7+ лет в production

  • $28+ млрд токенизированных активов

Основные риски:

  • Identity Registry centralization

  • Trusted Issuers compromise

  • Compliance module bugs

ERC-1400

ConsenSys UniversalToken:

  • Нет публичных аудитов от топ-компаний

  • Используется в production (Codefi Assets, tZERO)

  • Development стагнировал после миграции Polymath на Polymesh

Основные риски:

  • Off-chain certificate signing key compromise

  • Partition logic edge cases

  • Controller key management

Production Adoption

ERC-3643

По данным на 2025 год:

  • $28-32 млрд токенизированных активов

  • 92+ членов ERC3643 Association: DTCC, ABN AMRO, Deloitte, Fireblocks, Ava Labs, Hedera Foundation, OpenZeppelin, tZERO

  • Реальные кейсы: ABN AMRO (€5M green bond на Polygon), Fasanara Capital (tokenized funds), Citi (private equity pilots)

  • Multi-chain: Ethereum, Polygon, Avalanche, Base, Hedera

ERC-1400

  • tZERO: security tokens (St. Regis Aspen — $18M raise)

  • Polymath: мигрировал на Polymesh

  • ConsenSys: UniversalToken implementation

  • Development практически остановлен с 2020-2021

Trend: проекты на ERC-1400 либо мигрируют на Polymesh, либо переходят на ERC-3643.

Когда что выбирать

Выбирайте ERC-3643 если:

  • Стандартная структура — один класс токенов, одинаковые права для всех инвесторов

  • Регуляторные требования высокие — EU MiCA, SEC compliance, полный audit trail

  • Нужна on-chain verification — автоматическая проверка без доверия к off-chain системам

  • Планируется вторичный рынок — ERC-20 совместимость, интеграция с DEX

  • Важна экосистема — активное development, institutional backing, растущий tooling

Выбирайте ERC-1400 если:

  • Нужны partitions/tranches — разные классы акций с разными правами в одном контракте

  • Сложные vesting schedules — founder shares, employee options с различными lock-up periods

  • Legacy integration — работаете с платформами на ERC-1400 (tZERO)

  • Гибкость validation — хотите менять правила без contract upgrades

Альтернативный подход

Для сложных корпоративных структур рассмотрите:

  • Несколько отдельных ERC-3643 токенов вместо одного ERC-1400 с partitions

  • Polymesh blockchain (если Polymath экосистема критична)

  • CMTAT (используется Taurus, Daura, Obligate)

Заключение

ERC-3643 стал де-факто стандартом для институциональной токенизации:

  • Единственный Final status среди security token стандартов

  • On-chain compliance без зависимости от off-chain систем

  • Сильная экосистема: 92+ членов ассоциации, включая DTCC и Deloitte

  • $28+ млрд токенизированных активов

ERC-1400 остаётся релевантным для:

  • Сложных корпоративных структур с разными классами активов

  • Интеграции с существующей off-chain инфраструктурой

  • Legacy проектов на Polymath/tZERO экосистеме

Для нового проекта в 2025 году рекомендую начинать с ERC-3643, если нет hard requirement на partitions. Экосистема, tooling и institutional support делают его более безопасным выбором.


Ресурсы:

Статья основана на официальных спецификациях, документации ERC-3643 Association и практическом опыте имплементации обоих стандартов.

Комментарии (0)