一文吃透以太坊三大代币标准:ERC-20、ERC-721、ERC-1155 全解析

Posted by AiuYH8 Crypto Hub on September 5, 2025

如果你刚踏入区块链开发、数字藏品或游戏资产领域,理解 ERC-20、ERC-721 和 ERC-1155 就像在 Web3 世界拿到了通行证。本文用拆解乐高积木的方式带你快速拿捏三者的核心差异、适用场景及代码落地要点。


ERC-20:可互换的「硬通货」

为什么需要总量与可分割

ERC-20 把代币设计得像人民币、美元一样:总发行量固定,每个单位没有个性,想怎么切都行。正因可分割和多平台兼容,它成了 DeFi、DAO 国库、交易所计价的首选。

链上接口速查

totalSupply()    // 查询总供应量
balanceOf()      // 查地址有多少
transfer()       // 直接转账
approve + transferFrom // 授权别人花你的币
allowance()      // 查授权剩余额度

实战 30 秒跑通

pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract DemoToken is ERC20, Ownable {
    constructor() ERC20("DemoToken", "DEMO") {
        _mint(msg.sender, 1_000_000 * 10**decimals());
    }
}

制造一百万枚 DEMO 代币只需一句 mint,钱包就能直接识别。

👉 想亲手试试实时铸币?一键模拟发行模板已就位!


ERC-721:独一无二的艺术品身份证

不可替代的魅力

一张 Cryptopunk、一段 Twitter 原帖,上链后为何能卖出高价?——唯一性 & 溯源性正是 ERC-721 的灵魂。每个 tokenId 像艺术品编号,0.1 个 NFT 并不存在,无法掰成两块。

灵魂 7 招

ownerOf(uint256 tokenId)               // 查谁是持有人
approve(address to, uint256 tokenId)   // 单独某张图授权
setApprovalForAll(address operator)    // 一键授权平台
safeTransferFrom(...)                  // 安全寄送,防止空投黑洞

最小可用 NFT 合约

pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract MyNFT is ERC721URIStorage, Ownable {
    uint256 private _tokenIdCounter;

    constructor() ERC721("MyNFT", "MNFT") {}

    function mintNFT(address to, string memory uri) public onlyOwner returns (uint256) {
        _tokenIdCounter++;
        _mint(to, _tokenIdCounter);
        _setTokenURI(_tokenIdCounter, uri);
        return _tokenIdCounter;
    }
}

部署后调用 mintNFT(yourAddr, "https://arweave.net/xxx"),数字藏品立即生成,可在 OpenSea 上看到。


ERC-1155:一盒能用一把尺量的混合资产

一个合约,两份自由

想象超市 SKU:ERC-1155 同时上架易拉罐可乐(同质化 10,000 份)和限量钥匙扣(非同质化 100 份)。它把 ERC-20 的批量处理与 ERC-721 的唯一性塞进同一仓库,极大节省 Gas。

批量操作杀手锏

safeBatchTransferFrom(...)  // 一次性打包寄 100 把不同道具
mintBatch(...)              // 一键铸造多类资产
burnBatch(...)              // 销毁滞销商品

游戏一箱装备、元宇宙套餐门票用 ERC-1155 刚刚好。

游戏案例小跑

pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC1155/ERC1155.sol";
import "@openzeppelin/contracts/access/Ownable.sol";

contract GameItems is ERC1155, Ownable {
    uint256 public constant GOLD = 0;
    uint256 public constant SWORD = 1;

    constructor() ERC1155("https://api.game.com/item/{id}.json") {
        _mint(msg.sender, GOLD, 10**18, "");       // 同质化金币
        _mint(msg.sender, SWORD, 1000, "");        // 1000 把 NFT 剑
    }
}

一把剑 SWORD 拥有独立 ID,同时 GOLD 又是完全可分割的代币。

👉 想给游戏加组合拳?快速生成 ERC-1155 套餐工具在此!


同属以太坊家族,三张名片如何挑?

| 关键词 | ERC-20 | ERC-721 | ERC-1155 | |—|—|—|—| | 流动性 | 极高,生态最全 | 依赖市场需求 | 取决于项目设计 | | 操作成本 | 低 | 中 | 批量降低 20%–70% | | 典型场景 | DeFi 抵押、稳定币、应用通证 | 数字艺术、证书、会员证 | 游戏道具、门票套餐 | | 代码复杂度 | 低 | 中 | 中高 |


常见疑问 Q&A

Q1:ERC-1155 能完全替代 ERC-721 吗?
A:不行。稀缺藏品强调「独享」时,仍需要合约保证永远只刻一个 tokenId。ERC-1155 只能在 id=1、amount=1 时「拟真」唯一性,但合约层面其实允许再铸造更多。

Q2:用 OpenSea 上传图片等同于铸造 NFT?
A:只是平台代你执行了一次 mint,资产最终受制于所用合约。开源与否、升级权限掌握在谁手十分重要。

Q3:钱包为何收不到 ERC-20 代币?
A:80% 用户因 小数位数 没对齐。转账 UI 默认按 wei 显示,导致看起来余额错乱。别忘了 amount=数量×10^decimals

Q4:ERC-20 能否携带图片?
A:不能。ERC-20 没有元数据字段,只能存数量与名称。若想让通证携带「皮肤」,需配合 ERC-1167 代理或链下解析,但兼容性骤降。

Q5:同一个 tokenId 在 ERC-1155 里是否存在总量上限?
A:技术层面无上限,需开发者在业务逻辑里写死 maxSupply,否则可继续 mint。

Q6:直接把图片塞进合约行不行?
A:区块空间昂贵,存储 1 MB JPG 约花费上千美元,主流做法是把媒体存在 IPFS 或 Arweave,然后在合约里保存 CID URL。


一句话总结

  • 发稳定币、奖励积分:选 ERC-20
  • 做艺术品、凭证:选 ERC-721
  • 做游戏盲盒、复杂道具:选 ERC-1155

掌握三大以太坊代币标准后,你就能在 Web3 经济积木里自由拼搭财富与想象。