Skip to main content
RWA Tokenization: Architecture & Empirical Analysis10 Min Read

Token Standards for Regulated Assets: ERC-3643 vs ERC-1400 vs ERC-1404 Compared at the Code Level

Token Standards for Regulated Assets: ERC-3643 vs ERC-1400 vs ERC-1404 Compared at the Code Level

Why Regulated Assets Require Specialized Token Standards

A 2026 study of 20 major real-world asset platforms across 23 technical and operational dimensions found that most use hybrid infrastructure. Smart contracts handle token issuance, transfer controls, and redemption, while identity verification, custody, and legal ownership remain connected to off-chain systems.

This creates a clear technical challenge. A standard ERC-20 contract can record balances and transfer tokens. Still, it cannot independently verify investor eligibility, enforce jurisdiction rules, apply lockups, freeze holdings, recover assets, or explain why a regulated transfer failed.

This is where regulated asset token standards differ. ERC-3643 provides a standardized identity and compliance framework. ERC-1400 supports partitioned balances and broader securities lifecycle functions. ERC-1404 offers a lightweight interface for detecting and explaining transfer restrictions.

This code-level comparison examines how ERC-3643 vs ERC-1400 vs ERC-1404 handle investor verification, transfer validation, administrative controls, testing, and integration.

It helps to choose the most suitable standard for a regulated token project. But for the technical and legal framework, read this guide to RWA tokenization architecture, legal structure, and market data.

ERC-3643 vs ERC-1400 vs ERC-1404 at a Glance

Comparison Point

ERC-3643

ERC-1400

ERC-1404

Proposal status

Final

Draft and stale

Draft and stale

Base model

ERC-20 and ERC-173

ERC-20-compatible family

ERC-20 extension

Identity model

Standardized registry and claims

Implementation-agnostic

Not specified

Transfer pre-check

isVerified() and canTransfer()

canTransfer() variants

detectTransferRestriction()

Failure output

Boolean checks and reverts

Bytecode and bytes32 data

uint8 code and readable message

Native partitions

No

Yes

No

Document functions

Custom or external

Standardized interface

Not specified

Forced transfers

Standardized agent function

Controller operation

Custom

Wallet recovery

Standardized

Controller-based design possible

Custom

Best fit

Identity-driven permissioned assets

Partition-heavy securities

Lightweight restricted ERC-20

ERC-3643 is a final ERC requiring ERC-20 compatibility, on-chain identity, transfer pre-checks, recovery, freezing, pausing, minting, burning, forced transfers, and batch operations. ERC-1400 and ERC-1404 remain marked Draft and stale in the Ethereum EIPs repository.

What Should a Code-Level Comparison Measure?

A meaningful security token standards comparison must go beyond a feature checklist.

Engineering teams should examine:

  • Standardized interfaces and external dependencies
  • Calls executed before _transfer
  • Storage reads and state changes
  • Restriction and error handling
  • Minting, burning, freezing, and recovery permissions
  • Upgrade and administrator authority
  • Events available to wallets, exchanges, and indexers
  • Unit, fuzz, and invariant testing requirements

Every additional registry, controller, compliance module, and privileged role adds another branch that developers must test and auditors must review.

How Does ERC-3643 Enforce Compliance?

ERC-3643 Contract Architecture

An ERC-3643 implementation separates the token from several supporting contracts:

  • Identity Registry
  • Identity Registry Storage
  • Trusted Issuers Registry
  • Claim Topics Registry
  • Compliance contract
  • Compliance modules

The Identity Registry connects a wallet address to an identity contract and an investor country code. Its isVerified() function checks whether an investor is registered and holds the required claims issued by approved claim issuers.

The Compliance contract evaluates transaction-level rules. These may include approved countries, maximum ownership percentages, investor limits, or restrictions on transfers between investor categories.

How an ERC-3643 Transfer Executes

The following simplified example shows the main execution path:

function transfer(address to, uint256 amount)

    public

    whenNotPaused

    returns (bool)

{

    require(!_frozen[msg.sender] && !_frozen[to]);

    require(amount <= availableBalance(msg.sender));

    require(identityRegistry.isVerified(to));

    require(compliance.canTransfer(msg.sender, to, amount));

    _transfer(msg.sender, to, amount);

    compliance.transferred(msg.sender, to, amount);

    return true;

}

The token checks the pause state, frozen wallets, transferable balance, receiver identity, and offering-level rules before updating balances. It then calls transferred() so the compliance contract can update its state.

ERC-3643 also standardizes functions such as:

  • forcedTransfer
  • setAddressFrozen
  • freezePartialTokens
  • mint
  • burn
  • recoveryAddress
  • Batch minting, freezing, burning, and transfers

These interfaces make ERC-3643 a strong permissioned ERC-20 token architecture. However, its multi-contract structure increases deployment complexity, external-call risk, role-management requirements, and audit scope.

How Does ERC-1400 Model Security Tokens?

ERC-1400 is not a small interface. It combines several proposed standards:

  • ERC-1410 for partitioned balances
  • ERC-1594 for validation, issuance, and redemption
  • ERC-1643 for document management
  • ERC-1644 for controller operations

Together, these interfaces attempt to model more of the security lifecycle than a basic transfer-restriction hook.

How ERC-1400 Partitions Work

ERC-1400 partitions divide one investor’s balance into subsets with different rights or restrictions.

A token could use partitions for:

  • Locked and unlocked holdings
  • Primary and secondary-market tokens
  • Different share classes
  • Jurisdiction-specific balances
  • Separate distribution or voting rights

balanceOfByPartition(partition, holder);

partitionsOf(holder);

transferByPartition(partition, to, value, data);

operatorTransferByPartition(...);

The critical accounting invariant is that the sum of an investor’s partition balances must equal that investor’s total token balance.

Transfer Validation and Off-Chain Data

ERC-1400 proposes the following preflight functions:

canTransfer(to, value, data);

canTransferFrom(from, to, value, data);

canTransferByPartition(from, to, partition, value, data);

Instead of returning only true or false, they return a byte status code and additional bytes32 data.

Transfer functions can also receive a byte data parameter. An implementation may use this field for signed broker approval, transfer-agent authorization, or another off-chain input. The data structure remains implementation-specific.

ERC-1400 does not mandate one identity protocol. A deployment may use identity contracts, external registries, signed credentials, or centrally maintained address lists.

This flexibility is valuable, but it creates substantial variation. Developers should inspect the actual repository and deployed bytecode rather than assuming every ERC-1400 implementation behaves identically.

How Does ERC-1404 Restrict Transfers?

ERC-1404 takes a much smaller approach. It extends ERC-20 with two functions:

function detectTransferRestriction(

    address from,

    address to,

    uint256 value

) public view returns (uint8);

function messageForTransferRestriction(

    uint8 restrictionCode

) public view returns (string memory);

The issuer defines the restriction logic and the meaning of each code. Both transfer and transferFrom must evaluate detectTransferRestriction(). A nonzero result should stop the transaction.

A restricted token Solidity implementation could use:

if (!allowed[from]) return 1;

if (!allowed[to]) return 2;

if (block.timestamp < lockedUntil[from]) return 3;

if (balanceOf(to) + value > holdingLimit[to]) {

    return 4;

}

return 0;

A wallet or exchange can call the view function before submitting a transaction. It can then pass the returned code to messageForTransferRestriction() and display a readable explanation.

ERC-1404 does not standardize identity contracts, claim issuers, partitions, documents, freezing, recovery, forced transfers, or compliance modules. Its small interface simplifies initial integration, but almost every regulatory control must be designed, secured, and audited separately.

One Regulated Transfer Implemented Three Ways

Token Standards for Regulated Assets: ERC-3643 vs ERC-1400 vs ERC-1404 Compared at the Code Level: figure 2

Assume Investor A attempts to send 100 tokens to Investor B.

Both investors require valid KYC. Investor B must live in an approved jurisdiction; Investor A’s lockup must have expired, and Investor B cannot exceed the ownership limit.

ERC-3643 Execution Flow

Token.transfer

→ Check pause and frozen balances

→ IdentityRegistry.isVerified(B)

→ Compliance.canTransfer(A, B, 100)

→ Update ERC-20 balances

→ Compliance.transferred(...)

Identity eligibility lives in the registry architecture. Jurisdiction and ownership-limit rules normally sit in the Compliance contract.

ERC-1400 Execution Flow

canTransferByPartition

→ Identify the source partition

→ Evaluate investor eligibility

→ Validate signed transfer data

→ Return status code

→ transferByPartition

→ Update partition balances

Lockups and share classes can be represented through partitions. Identity verification remains implementation-specific.

ERC-1404 Execution Flow

transfer

→ detectTransferRestriction

→ Read whitelist, lockup, country, and cap mappings

→ Return restriction code

→ Revert or update ERC-20 balances

All compliance storage, update procedures, and administrator permissions are custom.

A successful preflight call does not guarantee execution. Identity status, balances, holding limits, or pause conditions may change before mining. The state-changing transfer must repeat every validation check.

Identity, Freezing, and Recovery

ERC-3643 provides the clearest standardized identity infrastructure through wallet mappings, claims, trusted issuers, claim topics, and country codes.

ERC-1400 permits different identity approaches but does not select one. ERC-1404 requires developers to build or integrate their own system.

Raw passports, tax records, and KYC documents should not be placed on-chain. A safer design stores attestations, hashes, eligibility states, expiration dates, and revocation information while keeping personal data off-chain.

Administrative powers also differ:

  • ERC-3643 agents can freeze holdings, force transfers, and recover assets.
  • ERC-1400 controllers can perform controller transfers and redemptions.
  • ERC-1404 requires custom administrative functions.

These capabilities create key-management risk. Use narrowly scoped roles, multisignature authorization, explicit role revocation, timelocks where appropriate, and separate events for every exceptional action.

What Production Repositories Reveal

Official specifications describe interfaces. Public repositories show how regulated token systems are organized in practice.

Tokeny’s original T-REX repository was archived in October 2025 and now directs users to the dedicated ERC-3643 repository. Any new ERC-3643 deployment should use the maintained codebase, pin a reviewed release or commit, and record that version in the deployment documentation.

Polymath’s legacy core contracts are not an ERC-1400 implementation, but their Transfer Manager pattern remains useful as an architectural reference. Polymath separated whitelist checks, investor-count limits, ownership-percentage limits, and manual approvals into modules. That separation makes individual rules easier to test and replace than one large transfer function containing every condition.

Securitize’s DSToken v4 is also separate from the three standards compared here. Its repository describes an ERC-20-compatible system with Registry, Compliance, and Trust services, plus distinct Master, Issuer, Exchange, and Transfer Agent roles. It also includes locking, seizing, trade pausing, bulk operations, and proxy-based upgrades.

The shared lesson is simple: a production-compliant security token smart contract is rarely one contract. Identity, validation, permissions, lifecycle actions, and upgrades must work as one system.

Gas, Storage, and Deployment Complexity

Do not claim one RWA token standard is cheaper without a reproducible benchmark.

Use the same:

  • Solidity compiler
  • Optimizer settings
  • EVM version
  • Compliance scenario
  • Test accounts
  • Proxy architecture
  • Storage-access assumptions

Record the repository commit and run Foundry gas snapshots for deployment, onboarding, successful transfers, failed transfers, freezing, forced transfers, partition movements, minting, redemption, and identity updates.

ERC-3643 incurs external identity and compliance calls. ERC-1400 may require additional partition storage writes. ERC-1404 can be smaller, but custom mappings, administrator functions, and upgrade logic still consume gas.

How Should Developers Test Restricted Tokens?

Unit tests should cover invalid identities, expired claims, frozen wallets, partial freezes, active lockups, country restrictions, holding limits, paused transfers, unauthorized administrators, forced transfers, and wallet recovery.

Fuzz transfer values, expiration dates, country codes, partitions, ownership limits, freeze amounts, and operator permissions.

Important invariants include:

  • Partition balances equal the total balance.
  • Failed transfers do not update the compliance state.
  • Frozen holdings cannot move through normal transfers.
  • Unauthorized accounts cannot execute forced transfers.
  • Recovery does not change total supply.
  • Only restriction code 0 succeeds under ERC-1404.

Wallets, exchanges, custodians, and indexers must also track identity updates, freezes, recoveries, partition changes, controller transfers, issuance, redemption, and document events.

ERC-3643 vs ERC-1400 vs ERC-1404: Which Should You Use?

Choose ERC-3643 When

ERC-3643 is suitable when standardized identity, trusted claim issuers, modular compliance, freezing, forced transfers, wallet recovery, and permissioned holding are core requirements.

Consider ERC-1400 When

ERC-1400 is worth considering when the asset requires partitioned balances, multiple share classes, document management, issuance and redemption functions, or controller operations.

However, because the proposal remains in Draft status and is marked stale, the specific implementation, interfaces, and deployed code should be reviewed carefully rather than relying on the ERC-1400 label alone.

Consider ERC-1404 When

Consider ERC-1404 when the project needs a restricted ERC-20 with a small preflight and error-message interface and already has custom identity and compliance infrastructure.

Do not select a standard by its ERC number alone. Review the repository commit, deployed bytecode, proxy configuration, upgrade authority, role assignments, registry dependencies, event coverage, audit scope, and alignment with the asset’s legal documents.

ERC-3643 vs ERC-1400 vs ERC-1404: The Final Code-Level Verdict

ERC-3643 is the strongest standardized architecture for identity-driven permissioned tokens.

ERC-1400 offers the richest model for partitions and security lifecycle operations, but its unfinished status and implementation differences require code-level review.

ERC-1404 is the simplest integration layer, yet it leaves most tokenized asset compliance logic to the developer.

Disclaimer: This article is for educational and technical comparison purposes only. It does not constitute legal, regulatory, investment, or security advice. Token issuers should consult qualified legal counsel, compliance specialists, and smart-contract auditors before selecting or deploying any regulated asset standard.

FAQs

Is ERC-3643 Compatible With ERC-20?

Yes. ERC-3643 requires ERC-20 compatibility but adds identity, compliance, pause, freeze, and transferable-balance checks before tokens move.

Does ERC-1404 Include KYC?

No. It standardizes transfer-restriction detection and message lookup. The issuer supplies the KYC, whitelist, jurisdiction, lockup, and ownership-limit logic.

Which Standard Supports Native Partitions?

ERC-1400 provides partition-specific balances and transfers through functions such as balanceOfByPartition() and transferByPartition().

Which Standard Has the Smallest Integration Surface?

ERC-1404 has the smallest standardized interface. ERC-3643 supplies more built-in infrastructure, while ERC-1400 requires deeper handling of partitions and implementation-specific rules.

Get Pre-IPO Insights Weekly

Join 5,000+ investors getting exclusive deal alerts.

Key Terms to Know

New to investing? Explore our glossary for more terms.

Related Articles

More from IPO Genie

Buy Now