Q6 · 代币标准
ERC20、ERC721、ERC1155 有什么区别?
⚡ 速记答案(30 秒)
- ERC20:可分割、同质化代币(每个 Token 完全等价,如普通货币)
- ERC721:不可分割、非同质化代币(NFT,每个
tokenId独一无二) - ERC1155:多资产标准,一份合约可同时管理 FT + NFT,支持批量转账,Gas 更省
📖 详细讲解
三种标准对比
| 特性 | ERC20 | ERC721 | ERC1155 |
|---|---|---|---|
| 同质化 | ✅ | ❌ | 都支持 |
| 可分割 | ✅ | ❌ | 看具体 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);
}面试技巧:回答时先给出核心结论,再展开细节。如果有实际项目经验,一定要结合具体案例说明。