题目
从前端角度比较 ERC-20、ERC-721 和 ERC-1155:用户持有的资产如何标识,怎样查询余额或所有权,如何转移,以及授权给第三方时粒度有什么不同?
考察目标
- 是否理解同质化数量、唯一 tokenId 和“合约地址 + id + 数量”三种资产模型。
- 是否能选择正确的余额、转移和授权接口。
- 是否知道 UI 不能只用 symbol 或合约地址识别所有资产。
考察三类 Token 的余额模型、标识方式、转移接口和授权粒度差异。
从前端角度比较 ERC-20、ERC-721 和 ERC-1155:用户持有的资产如何标识,怎样查询余额或所有权,如何转移,以及授权给第三方时粒度有什么不同?
ERC-20 表示同质化数量,用 balanceOf(address) 查余额,通过 transfer 或 transferFrom 转移数量,授权是 owner 对 spender 的额度。ERC-721 的每个 tokenId 唯一,用 ownerOf(tokenId) 查所有者,可按单个 token 授权,也可给 operator 全量操作权限。ERC-1155 一个合约可管理多个 id,每个账户对每个 id 有数量,支持批量查询和批量转移,标准授权主要是 setApprovalForAll 的 operator 权限。
ERC-20 的同一合约内,每个最小单位在接口层是同质的。前端关注:
balanceOf(owner):账户持有数量。allowance(owner, spender):spender 可使用的额度。transfer(to, value):持有人直接转移。approve + transferFrom:第三方在额度内代为转移。金额需要结合 decimals 展示,但业务计算应保持最小单位整数。
ERC-721 的核心是唯一 tokenId:
ownerOf(tokenId):查询某个 token 的所有者。balanceOf(owner):只返回该账户持有多少个 NFT,不返回 tokenId 列表。approve(to, tokenId):授权单个 token。setApprovalForAll(operator, approved):授权 operator 管理该账户的全部该系列 NFT。safeTransferFrom:转给合约时会检查接收方是否实现接收接口,通常比裸 transferFrom 更安全。仅靠标准合约调用通常不能高效枚举账户的所有 tokenId,前端常需事件索引或数据服务。
ERC-1155 在一个合约中管理多个 id;同一个 id 可以有多个数量,因此资产键至少是“chainId + 合约地址 + tokenId”:
balanceOf(account, id):查询某个账户某个 id 的数量。balanceOfBatch:批量查询账户与 id 组合。safeTransferFrom:转移某个 id 的指定数量。safeBatchTransferFrom:一次转移多个 id 和数量。setApprovalForAll:给 operator 全局操作权限,标准中没有 ERC-721 式的单 token 授权。前端资产对象不能只保存一个 amount。至少要根据标准保存:
三者都必须带 chainId。名称、symbol、图片和元数据用于展示,不是资产身份的安全依据。
balanceOf 返回值当成 tokenId。balanceOf 不能告诉你用户拥有哪些 tokenId?发现这道题有问题? 反馈此题