跳转到内容

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-20ERC-721ERC-1155
同质化两者都支持
批量操作
代币类型数量1种1种无限
典型用途货币、治理代币收藏品、域名游戏资产
Gas 效率最高(批量)

其他重要标准

标准说明
ERC-4626代币化金库标准(DeFi yield 产品)
ERC-2981NFT 版税标准
ERC-712结构化数据签名标准
ERC-2612ERC-20 Permit(无 Gas 授权)

深入阅读