ERC20 vs ERC721 授权机制差异|从同质化到非同质化的根本不同
ERC20(同质化代币)与 ERC721 / ERC1155(NFT)的授权机制设计完全不同。本文按 6 个维度对比:方法名、参数、范围、撤销、风险、典型场景。
ERC20 与 ERC721 / ERC1155 授权机制有什么差异?直接答:ERC20 是「同质化」用 approve(spender, amount) 限额授权;ERC721 是「非同质化」用 approve(spender, tokenId) 单 NFT 授权或 setApprovalForAll(operator, true) 全权授权;ERC1155 同样有 setApprovalForAll。根本不同:ERC20 限额风险线性,ERC721 setApprovalForAll 风险指数级(一次失守整个 collection)。
如果你处理完授权差异后想转资产到交易所,可顺路准备 币安官网 的实名账号,并用 币安官方App 看充币地址。下载入口在 下载页。
6 维度对比表
| 维度 | ERC20 | ERC721 | ERC1155 |
|---|---|---|---|
| 标准定义 | EIP-20 | EIP-721 | EIP-1155 |
| 同质化 | 是 | 否 | 部分 |
| 单笔授权方法 | approve(spender, amount) | approve(spender, tokenId) | 不直接支持单笔 |
| 全权授权方法 | 无 | setApprovalForAll(operator, true) | setApprovalForAll(operator, true) |
| 撤销方法 | approve(spender, 0) | approve(0x0, tokenId) | setApprovalForAll(operator, false) |
| 风险等级 | 中(线性) | 高(setApprovalForAll 指数级) | 高 |
| 4byte selector | 0x095ea7b3 | 0x095ea7b3(同 ERC20)+ 0xa22cb465 | 0xa22cb465 |
第 1 步:ERC20 授权流程
你的钱包 → approve(Uniswap Router, 100 USDT)
Uniswap Router → 调 swap → 内部调 transferFrom(你, Pool, 100)
| 步骤 | 链上动作 |
|---|---|
| 1 | approve 设置 allowance = 100 |
| 2 | swap 触发 transferFrom |
| 3 | transferFrom 检查 allowance ≥ 100 |
| 4 | 转账成功,allowance 减 100 |
第 2 步:ERC721 授权流程(单个)
你的钱包 → approve(OpenSea, tokenId=42)
OpenSea → 调 buy → 内部调 transferFrom(你, Buyer, tokenId=42)
| 步骤 | 链上动作 |
|---|---|
| 1 | approve(spender=OpenSea, tokenId=42) |
| 2 | 仅授权该单个 NFT |
| 3 | 该 NFT 转出后 approve 自动失效 |
第 3 步:ERC721 授权流程(全权)
你的钱包 → setApprovalForAll(OpenSea Conduit, true)
OpenSea Conduit → 你 collection 里任意 NFT 都能转
| 步骤 | 链上动作 |
|---|---|
| 1 | setApprovalForAll 让 operator 拥有全权 |
| 2 | operator 后续可以无数次 transferFrom |
| 3 | 永不过期(直到 setApprovalForAll(operator, false)) |
第 4 步:ERC1155 是怎么处理半同质化的
ERC1155 一个 tokenId 可以代表多个相同的 NFT(例 1000 张「金币卡」共享 tokenId=1)。
| 操作 | 说明 |
|---|---|
| balanceOf(owner, tokenId) | 你拥有多少个该 tokenId |
| safeTransferFrom(from, to, tokenId, amount) | 转 amount 个 |
| setApprovalForAll | 全权(同 ERC721) |
A:ERC1155 主要给游戏道具用——同样要警惕 setApprovalForAll。
第 5 步:撤销操作对比
| Token 类型 | 撤销调用 |
|---|---|
| ERC20 | approve(spender, 0) |
| ERC721 单笔 | approve(0x0, tokenId) |
| ERC721 全权 | setApprovalForAll(operator, false) |
| ERC1155 全权 | setApprovalForAll(operator, false) |
A:Etherscan / Revoke.cash 自动识别类型并调对应方法——用户不用记。
第 6 步:钓鱼场景下的差异
| 钓鱼手法 | ERC20 触发 | ERC721 触发 |
|---|---|---|
| 假 DEX | approve | approve(单) |
| 假 NFT 市场 | 不适用 | setApprovalForAll |
| Permit | EIP-2612(部分 Token) | EIP-4494(少见) |
| 你以为「连接钱包」实际签授权 | 都可能 | 都可能 |
实战:清理混合 Token 类型的授权
| 步骤 | 操作 |
|---|---|
| 1 | 在 Revoke.cash 看到 ERC20 + ERC721 + ERC1155 三类授权 |
| 2 | 按 Type filter 分组 |
| 3 | 优先撤 ERC721 / ERC1155 setApprovalForAll(指数风险) |
| 4 | 然后撤 ERC20 Unlimited 给陌生合约 |
| 5 | 最后清剩余的 |
详见 Token approval 分类的多链统一撤销篇。
第 7 步:Solana 与 BTC 上是怎么处理的
| 链 | 授权机制 |
|---|---|
| ETH / BSC / Polygon 等 EVM | 同上 ERC20/721/1155 |
| Solana | 用 SPL Token approve (delegate) + revoke |
| BTC | 没有授权概念(每笔交易需私钥签名) |
| Solana NFT | 用 setAuthority 授权 metadata |
| Cosmos / Cosmwasm | 自定义 cw20 授权 |
A:BTC 是最安全的——根本没有「Token Approval」概念,所以不会被 Drainer 攻击。EVM 系是最高频的钓鱼目标。
风险提示
ERC721 setApprovalForAll 的「指数级风险」是 NFT 钓鱼的核心——单一签名 = 整个 collection 失守。比 ERC20 的「线性损失」严重得多。
如果资产想出金,可借助 币安官网 走 C2C。
实操核对清单
- [ ] 已了解 3 种 Token 标准的授权差异
- [ ] 知道 ERC721 单笔 vs 全权
- [ ] setApprovalForAll 是 NFT 全权(极高风险)
- [ ] 撤销操作对应 4 种调用方法
- [ ] 清理时按风险等级排序
- [ ] BTC 完全没有授权概念
一站式回顾
A:ERC20 vs ERC721 / ERC1155 授权 = 限额 vs 全权。核心 3 个差异:方法(approve vs setApprovalForAll)、范围(限额 vs 全权)、风险(线性 vs 指数)。核心 1 个心法:setApprovalForAll 是「核武器级」授权——只给主流市场,不熟陌生合约立即撤。
如果想了解多链统一撤销授权的方案,下一步建议看多链统一撤销授权方案篇。
常见问题
ERC721 也有 Permit 吗?
A:有,EIP-4494 是 ERC721 的 Permit 标准——但应用极少。主流 NFT 市场仍用传统 approve / setApprovalForAll。
我能不能给 ERC721 设限额?
A:不能。NFT 是非同质化,没有「数量」概念——只有「授权这一个」(单 tokenId)或「授权全部」(setApprovalForAll)。
approve(0x0, tokenId) 与 setApprovalForAll(operator, false) 哪个先?
A:先 setApprovalForAll(operator, false)——全权撤销优先。单 tokenId approve 在新 transfer 后自动失效,不必每个都撤。
ERC1155 一定要 setApprovalForAll 吗?
A:是。ERC1155 标准没有定义单笔 approve——只有 setApprovalForAll。这就是 ERC1155 风险天然较高的原因。
撤销 setApprovalForAll 后还能在 OpenSea 卖 NFT 吗?
A:能登录但下次挂单时 OpenSea 会再弹一次 setApprovalForAll 让你签。不影响买家。
我能用同一个 spender 给 ERC20 + ERC721 都授权吗?
A:能但分开做。ERC20 与 ERC721 是不同合约——给同一 spender 授权要分别 approve。
Solana 的 SPL Token 授权风险高吗?
A:相对低。Solana 的 delegate 机制比 EVM 简单——每笔操作都需要重新签名,没有「一次授权终身有效」概念。这是 Solana 在 Drainer 攻击下的天然优势。
文档发布于 2026-05-08,下次复测计划 2026-08-08(约每 90 天回访一次,确认 ERC20 / ERC721 / ERC1155 授权标准与撤销方法未变)。