Q6 · 代币标准

ERC20、ERC721、ERC1155 有什么区别?

ERC20ERC721ERC1155NFT

⚡ 速记答案(30 秒)

  • ERC20:可分割、同质化代币(每个 Token 完全等价,如普通货币)
  • ERC721:不可分割、非同质化代币(NFT,每个 tokenId 独一无二)
  • ERC1155:多资产标准,一份合约可同时管理 FT + NFT,支持批量转账,Gas 更省

📖 详细讲解

三种标准对比


特性ERC20ERC721ERC1155
同质化都支持
可分割看具体 Token
批量转账
一个合约多种资产
典型用途代币NFT游戏道具

核心接口对比


ERC20 核心方法

transfer(to, amount)

approve(spender, amount)

transferFrom(from, to, amount)

balanceOf(account)


ERC721 核心方法

ownerOf(tokenId)

transferFrom(from, to, tokenId)

approve(to, tokenId)

tokenURI(tokenId)


ERC1155 核心方法

balanceOf(account, id)

safeTransferFrom(from, to, id, amount, data)

safeBatchTransferFrom(...) - 批量转账


面试要点


• ERC1155 的 Gas 优化原理

• 各标准的事件定义

• OpenZeppelin 实现的使用

💻 代码示例

ERC20 接口定义
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, 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);
}
💡
面试技巧:回答时先给出核心结论,再展开细节。如果有实际项目经验,一定要结合具体案例说明。