ERC20 vs ERC721 授权机制差异|从同质化到非同质化的根本不同

ERC20(同质化代币)与 ERC721 / ERC1155(NFT)的授权机制设计完全不同。本文按 6 个维度对比:方法名、参数、范围、撤销、风险、典型场景。

发布于 2026-05-08 · 约 9 分钟 · Token approval

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 授权标准与撤销方法未变)。