ERC-3643
π ERC-3643: The Security Token Standard
ERC-3643 is a comprehensive standard for security tokens on the Ethereum blockchain. It provides a framework for issuing, managing, and trading compliant security tokens.
ποΈ Architecture
The ERC-3643 standard consists of several interconnected components:

π§ Core Concepts
1. Token π°
The main ERC-3643 token contract that implements the standard's interfaces.
2. Identity Registry π
Manages the identities of token holders and their associated claims.
3. Compliance π
Enforces transfer restrictions and other compliance rules.
4. Trusted Issuers Registry π
Maintains a list of trusted claim issuers.
5. Claim Topics Registry π
Defines the types of claims that can be associated with identities.
πΆ User Flow
Here's a typical user flow for interacting with ERC-3643 tokens:

π» Implementation Details
Token Interface
interface IERC3643 is IERC20 {
function setIdentityRegistry(address _identityRegistry) external;
function setCompliance(address _compliance) external;
function forcedTransfer(address _from, address _to, uint256 _amount) external returns (bool);
function mint(address _to, uint256 _amount) external;
function burn(address _from, uint256 _amount) external;
// ... additional functions
}
Identity Registry Interface
interface IIdentityRegistry {
function registerIdentity(address _address, uint16 _country, bytes32 _hash) external;
function updateIdentity(address _address, uint16 _country, bytes32 _hash) external;
function deleteIdentity(address _address) external;
function isVerified(address _address) external view returns (bool);
// ... additional functions
}
Compliance Interface
interface ICompliance {
function canTransfer(address _from, address _to, uint256 _amount) external view returns (bool);
function transferred(address _from, address _to, uint256 _amount) external;
function created(address _to, uint256 _amount) external;
function destroyed(address _from, uint256 _amount) external;
// ... additional functions
}
π Example Implementation
Here's a basic implementation of the ERC-3643 token:
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "./interfaces/IERC3643.sol";
import "./interfaces/IIdentityRegistry.sol";
import "./interfaces/ICompliance.sol";
contract ERC3643Token is ERC20, IERC3643 {
IIdentityRegistry public identityRegistry;
ICompliance public compliance;
constructor(string memory name, string memory symbol) ERC20(name, symbol) {
// Initialize with default identity registry and compliance
}
function setIdentityRegistry(address _identityRegistry) external override {
// Implementation
}
function setCompliance(address _compliance) external override {
// Implementation
}
function transfer(address recipient, uint256 amount) public virtual override(ERC20, IERC20) returns (bool) {
require(compliance.canTransfer(msg.sender, recipient, amount), "Transfer not allowed");
bool success = super.transfer(recipient, amount);
if (success) {
compliance.transferred(msg.sender, recipient, amount);
}
return success;
}
// Implement other required functions...
}
π Key Features
π Built-in compliance and regulatory features
π Identity management for token holders
π Flexible transfer restrictions
π Granular control over token issuance and management
π Support for global regulatory requirements
ERC-3643 provides a comprehensive framework for security tokens, addressing the complex regulatory requirements of tokenized securities. Its modular design allows for flexibility in implementing various compliance rules and identity verification processes.
Last updated
Was this helpful?