Token 标准 (ERC-20/721/1155)
Token 标准 (ERC-20/721/1155)
本页内容正在整理中,欢迎贡献。
概述
以太坊通过 ERC(Ethereum Request for Comments)标准定义了 Token 合约的接口规范。标准化接口使得钱包、交易所和 DApp 无需了解每个 Token 的实现细节,即可与任意符合标准的合约交互。
主要内容
ERC-20:同质化代币
ERC-20 是最广泛使用的 Token 标准,适用于可互换的代币(如 USDC、UNI、LINK)。
核心接口:
interface IERC20 { // 查询 function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256);
// 转账 function transfer(address to, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool);
// 授权 function approve(address spender, uint256 amount) external returns (bool);
// 事件 event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value);}特点:
- 每个 Token 完全相同,可互换
- 支持授权(Approve)+ 代扣(TransferFrom)模式
- 标准扩展:ERC-20Permit(EIP-2612,无需 Gas 的签名授权)
ERC-721:非同质化代币(NFT)
ERC-721 每个 Token 拥有唯一的 tokenId,适用于不可互换的资产(艺术品、游戏道具、域名)。
核心接口:
interface IERC721 { // 查询 function balanceOf(address owner) external view returns (uint256); function ownerOf(uint256 tokenId) external view returns (address);
// 转账 function transferFrom(address from, address to, uint256 tokenId) external; function safeTransferFrom(address from, address to, uint256 tokenId) external;
// 授权 function approve(address to, uint256 tokenId) external; function setApprovalForAll(address operator, bool approved) external; function getApproved(uint256 tokenId) external view returns (address); function isApprovedForAll(address owner, address operator) external view returns (bool);
// 事件 event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); event ApprovalForAll(address indexed owner, address indexed operator, bool approved);}关键扩展:
- ERC-721Metadata:提供
name()、symbol()、tokenURI(tokenId)接口 - ERC-721Enumerable:可枚举所有 Token,支持
tokenByIndex
ERC-1155:多代币标准
ERC-1155 在单个合约中同时管理多种同质化和非同质化代币,Gas 效率更高。
核心接口:
interface IERC1155 { // 查询 function balanceOf(address account, uint256 id) external view returns (uint256); function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
// 转账(支持批量) function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
// 授权 function setApprovalForAll(address operator, bool approved) external; function isApprovedForAll(address account, address operator) external view returns (bool);}优势:
- 批量转账节省 Gas(~90% 节省 vs 多次 ERC-721 转账)
- 单合约管理游戏中的所有资产类型
- 同时支持同质化(货币)和非同质化(道具)代币
三种标准对比
| 特性 | ERC-20 | ERC-721 | ERC-1155 |
|---|---|---|---|
| 同质化 | 是 | 否 | 两者都支持 |
| 批量操作 | 否 | 否 | 是 |
| 代币类型数量 | 1种 | 1种 | 无限 |
| 典型用途 | 货币、治理代币 | 收藏品、域名 | 游戏资产 |
| Gas 效率 | 高 | 中 | 最高(批量) |
其他重要标准
| 标准 | 说明 |
|---|---|
| ERC-4626 | 代币化金库标准(DeFi yield 产品) |
| ERC-2981 | NFT 版税标准 |
| ERC-712 | 结构化数据签名标准 |
| ERC-2612 | ERC-20 Permit(无 Gas 授权) |