什么是 ERC-721?
ERC-721 是 Ethereum 的一种代币标准,用于创建和管理非同质化代币,通常称为 NFT。每个 ERC-721 代币都有唯一的代币 ID,可将其与同一智能合约管理的其他代币区分开来。官方ERC-721 规范规定了标准化规则,用于追踪所有权、转移代币,以及授予其他地址管理 NFT 的权限。
ERC-721 被归类为最终版 Ethereum 征求意见标准。创建该标准的原因是,同质化代币标准无法准确表示需要单独识别和追踪的资产。ERC-721 代币可以代表数字收藏品、游戏道具、会员凭证、虚拟财产、活动门票、金融头寸、类似域名的资产,或与实物相关的记录。该标准定义了区块链上的所有权和转移行为,但不会自动确立版权、法律所有权、真实性、金融价值或对外部资产的权利。ERC 是什么意思?
ERC 是 Ethereum Request for Comments(Ethereum 征求意见)的缩写。ERC 描述了一种技术标准,应用和智能合约可以遵循该标准,以提高 Ethereum 生态系统内的互操作性。ERC-721 是分配给非同质化代币标准的标识编号。该编号不代表代币供应量、价格、区块链地址或发行日期。只要合约的必要行为仍与标准兼容,实现 ERC-721 的合约就可以添加可选扩展和自定义功能。为什么要创建 ERC-721?
同质化资产可以互换,因为同一种资产的一个单位通常与另一个单位具有相同的用途。非同质化资产必须单独追踪,因为每个单位都可能具有不同的特征、历史、稀有度、权利或价值。ERC-721 为钱包和应用提供了一种通用方法,用于识别每个唯一代币的所有者。该标准还统一了转账、授权、操作员权限和所有权相关事件日志。如果没有统一标准,每个 NFT 合约都可能需要单独集成。通用函数让通用型钱包、区块链浏览器、索引器、游戏、借贷协议和其他加密应用能够与多个 NFT 系列交互。ERC-721 的工作原理
ERC-721 智能合约会存储或计算每个有效代币 ID 对应的所有者。合约还会追踪每个地址在该系列中持有的 NFT 数量。发生经授权的转移时,合约会将代币 ID 的所有权从发送方移除,并分配给接收方。合约会触发标准化的
什么是代币 ID?
代币 ID 是一个无符号整数,用于在 ERC-721 合约中唯一标识一个 NFT。同一个代币 ID 可以存在于多个不同合约中,但不代表同一资产。因此,识别一个 NFT 时,需要同时使用其区块链网络、合约地址和代币 ID。例如,一个合约中的代币 ID 50 与另一个合约中的代币 ID 50 毫无关联。代币 ID 不必从 0 开始,也不必按简单的顺序递增。系列可以使用连续 ID、随机分配的 ID、编码标识符,或合约支持的其他系统。应用应查询合约,而不是假定某个范围内的每个数字都对应一个已存在的 NFT。ERC-721 为何具有非同质性?
每个 ERC-721 代币都会作为独立的区块链对象进行追踪。同一系列中的两个 NFT 可能具有不同的元数据、历史、属性、稀有度和市场价值。拥有一个代币 ID 并不代表持有者拥有另一个代币 ID。标准 ERC-721 代币以完整代币为单位转移,而不是按小数数量转移。部分经济所有权需要使用核心 ERC-721 标准之外的单独智能合约或代币结构。称两个 NFT 为非同质化,并不保证它们的视觉内容不同,因为不同代币 ID 可能指向相似或完全相同的元数据。ERC-721 核心函数
核心标准包含用于查询所有权、转移 NFT 和管理转移权限的函数。必要函数包括
balanceOf 函数
ownerOf 函数
transferFrom 函数
通过
safeTransferFrom 函数
ERC-721 包含两个版本的
当接收方是智能合约时,NFT 合约会调用接收方的
什么是 ERC-721 接收方?
ERC-721 接收方是实现了
兼容的接收方会返回预期选择器,通常表示为
当前的 ERC-721 实现文档提供了接收方接口和基础接收方工具,供需要接收 NFT 的合约使用。
接收方在记录存款或授予权益前,应核验触发回调的 NFT 合约。ERC-721 授权
ERC-721 授权允许 NFT 所有者委托转移权限,但不会立即转移所有权。针对单个代币的授权仅适用于一个代币 ID。操作员授权适用于某个地址在该合约中持有的所有 NFT。授权会记录在链上,在有效期间无需所有者再次签名即可使用。用户应将 NFT 授权请求视为敏感的财务权限。批准不受信任的地址,可能让获批方转移有价值的 NFT。approve 函数
getApproved 函数
应用在检查某个账户能否转移 NFT 时,还必须考虑
setApprovalForAll 函数
isApprovedForAll 函数
该函数返回
ERC-721 事件
ERC-721 定义了
Transfer 事件
Approval 和 ApprovalForAll 事件
ERC-165 接口检测
每个符合 ERC-721 标准的合约都必须支持 ERC-165 接口检测。ERC-165 标准定义了
ERC-721 核心接口 ID 为
合规合约在被询问是否支持此标识符时,应返回
ERC-721 元数据
ERC-721 包含可选的元数据扩展。该扩展增加了
其 ERC-165 接口 ID 为
tokenURI 的工作原理
元数据更新事件
ERC-721 本身不提供适用于所有元数据变更的标准化事件。可选的 ERC-4906 元数据更新扩展增加了
ERC-4906 接口 ID 为
ERC-721 枚举
可选的枚举扩展可通过链上函数查询 NFT 供应量和所有权列表。其接口 ID 为
该扩展增加了
链下应用可以改为通过索引
铸造 ERC-721 代币
铸造会创建新的有效代币 ID,并分配其首位所有者。ERC-721 核心标准没有规定谁可以铸造,也没有规定必须如何发起铸造。一个系列可以允许公开铸造、将铸造权限限制为获授权角色、要求付款、使用白名单,或在部署时创建所有 NFT。铸造通常会触发一个从零地址发出的
销毁 ERC-721 代币
销毁会将 NFT 从有效所有权记录中移除。ERC-721 核心接口不要求提供公开销毁函数。系列可以允许所有者、获批操作员、管理员或协议逻辑销毁代币。销毁通常会触发一个发往零地址的
ERC-721 版税
创作者版税不属于 ERC-721 核心标准。可选的 ERC-2981 NFT 版税标准提供了一种方法,用于报告销售价格对应的版税接收方和建议金额。
ERC-2981 会传达版税信息,但不会强制每次转移或每个应用支付版税。如果具体实现支持,系列可以设置默认版税或针对特定代币的版税。如果合约授予管理员相关权限,版税接收方和费率可能会发生变化。用户不应假定每次 ERC-721 转移都包含可强制执行的创作者付款。ERC-721 与 ERC-20
ERC-20 面向同质化代币余额,而 ERC-721 面向单独标识的 NFT。ERC-20 账户可以持有某种代币的可分割数量。ERC-721 账户持有不同的代币 ID。ERC-721 的
ERC-721 与 ERC-1155
ERC-721 通过一个 NFT 系列合约表示由不同所有者持有的独立代币 ID。ERC-1155 多代币标准允许一个合约管理多个代币 ID,并分别记录其数量余额。
ERC-1155 代币 ID 可以代表同质化、半同质化或唯一资产。一个地址可以持有同一个 ERC-1155 代币 ID 的多个单位。在标准模型下,一个有效的 ERC-721 代币 ID 只有一个所有者。ERC-1155 还支持标准化批量转移,而 ERC-721 转移通常一次处理一个 NFT。适用的标准取决于项目的所有权和库存管理需求。ERC-721 的应用场景
数字艺术系列可以使用 ERC-721 代币记录单独标识作品的所有权。区块链游戏可以使用 NFT 表示角色、土地、装备或其他独特物品。会员系统可以使用 NFT 表示访问权或社区身份。金融应用可以将独特的债务头寸、保险单、流动性头寸或债权代币化。活动系统可以发行具有受控转移规则的独立编号门票。项目可以将 NFT 与实体产品关联,但智能合约无法独立验证实物的占有情况或法律所有权。ERC-721 代币也可以代表凭证,但不应将敏感个人数据公开存储在公共区块链上。NFT 所有权与版权
拥有 ERC-721 代币意味着区块链合约将某个地址识别为该代币 ID 的所有者。这不会自动转让相关艺术品或媒体的版权。版权和商业使用权取决于创作者的许可、销售协议和适用法律。项目可能授予广泛的商业权利、有限的个人使用权,或不授予任何额外知识产权。元数据还可能引用代币发行方无权使用的内容。买家应查看项目的法律条款,而不是假定代币所有权赋予一切可能的权利。ERC-721 授权风险
恶意授权请求是 NFT 持有者面临的主要安全风险之一。网络钓鱼应用可能会在描述交易为账户验证或访问确认时请求
安全转移与重入风险
当接收方是智能合约时,安全 NFT 转移会调用外部代码。在第一次操作完全结束前,接收方可以回调原应用。这种行为可能在铸造、销售、借贷、质押、托管或提现合约中造成重入漏洞。官方 Solidity 安全指南建议:在预期逻辑允许的情况下,应先完成检查和重要状态变更,再执行外部交互。
开发者还应考虑跨函数重入,因为恶意接收方可能调用另一个已公开的函数。应使用恶意合约测试接收方回调,而不能将其视为简单通知。元数据安全风险
NFT 展示的内容可能取决于区块链之外的数据。外部服务器可能无法访问、改变响应内容或删除文件。购买后,可变 URI 可能指向不同内容。元数据可能包含误导性描述、抄袭作品、隐藏外部链接或不安全的文件格式。去中心化存储可以提高持久性,但内容仍依赖于持续可用性和标识符准确性。完全链上元数据可以减少对外部托管的依赖,但可能增加部署和更新成本。合约真实性风险
任何人都可以部署一个使用熟悉名称、符号、图像或代币 ID 的 ERC-721 合约。接口兼容性不能证明某个系列是真实的。用户应通过权威项目来源核实区块链网络和完整合约地址。已验证的源代码发布可以表明代码与合约相符,但不能保证商业行为诚实或经济设计安全。还应检查代币历史、创作者声明、管理员权限和元数据控制方式。可升级的 ERC-721 合约
ERC-721 合约可能使用代理,使其逻辑在部署后仍可更改。升级可以修复错误或添加功能。升级也可能改变铸造、转移、授权、元数据、版税、暂停或销毁行为。升级权限遭到控制后,攻击者可能安装影响 NFT 所有权的恶意逻辑。用户应确认由谁控制升级、需要多少个签名,以及是否设有时间延迟。被描述为去中心化的系列仍可能设有权限较大的管理员角色。开发者如何实现 ERC-721
除非确有自定义设计的必要,否则开发者应使用经过审查且积极维护的实现。当前的 ERC-721 开发指南介绍了核心实现,以及适用于元数据、枚举、销毁、暂停、版税、投票和其他用途的可选扩展。
铸造权限应与系列公布的供应规则一致。转移和授权应拒绝未经授权的调用者和无效地址。如果代币可能直接发行给智能合约,开发者应使用安全铸造。开发者应测试恶意接收方、重入、无效代币 ID、授权清除、操作员权限、销毁和接口检测。管理功能应采用清晰的访问控制,并触发有用的事件。如何评估 ERC-721 NFT
第一步是核实网络、合约地址和代币 ID。第二步是确认合约支持 ERC-721 核心接口。第三步是检查当前所有者和转移历史。第四步是查看代币级和系列级授权。第五步是检查元数据及关联媒体的存储方式。第六步是确认铸造、销毁、暂停、冻结和升级权限归属。第七步是确定供应量和稀有度相关说法能否通过链上数据验证。第八步是查看审计和源代码,但不要将其视为保证。第九步是了解 NFT 附带哪些法律或商业权利。第十步是在承担有价值资产风险前,先使用低价值交易测试陌生合约。ERC-721 转移示例
假设 Alice 拥有某 ERC-721 系列中的代币 ID 101。合约的
她的钱包调用
合约更新所有权记录,并调用接收方的
如果返回正确的选择器,转移就会完成,NFT 合约也会触发
常见 ERC-721 错误
一个常见错误是认为系列名称可以唯一标识 NFT。另一个错误是未检查操作员地址,就授予系列级操作员权限。第三个错误是认为断开钱包连接会删除链上授权。第四个错误是使用
常见问题
ERC-721 是什么意思?
ERC-721 是 Ethereum 标准,定义了非同质化代币的所有权、转移、授权和接口规则。ERC-721 和 NFT 是一回事吗?
ERC-721 是一种 NFT 技术标准,而 NFT 是范围更广的概念,也包括依据其他标准创建的代币。ERC-721 是同质化的吗?
不是。每个有效的 ERC-721 代币 ID 都会单独追踪,并且可能具有不同的属性和价值。ERC-721 接口 ID 是什么?
ERC-721 核心接口 ID 为
如何识别 ERC-721 NFT?
需要结合区块链网络、智能合约地址和代币 ID 来识别 NFT。balanceOf 会返回什么?
它会返回某个地址在一个 ERC-721 合约中持有的 NFT 数量。ownerOf 会返回什么?
它会返回有效代币 ID 当前所有者的地址。transferFrom 和 safeTransferFrom 有什么区别?
ERC-721 NFT 可以发送到智能合约吗?
可以,但通常应使用安全转移,这样接收方必须确认其能够接收 NFT。approve 有什么作用?
它会授予一个地址转移某个特定 NFT 的权限。setApprovalForAll 有什么作用?
它会授权操作员管理所有者在该 ERC-721 合约中持有的每个 NFT。操作员授权会自动过期吗?
不会。标准操作员授权会一直有效,直到所有者撤销,或自定义合约逻辑改变其效果。NFT 转移时会清除针对该代币的授权吗?
会。NFT 转移时,针对该代币的授权会被清除。ERC-721 是否要求提供元数据?
不要求。元数据接口是可选的,但大多数 NFT 系列都会实现该接口。ERC-721 元数据可以更改吗?
可以。除非合约和存储系统提供可验证的不可变性保证,否则元数据可能发生变化。每个 ERC-721 合约都有 totalSupply 吗?
没有。
ERC-721 是否定义了铸造?
该标准通过所有权事件识别铸造行为,但不要求采用特定的公开铸造函数或供应政策。ERC-721 是否定义了销毁?
没有。销毁函数是可选的,取决于具体实现。ERC-721 会强制执行版税吗?
不会。版税需要额外逻辑或标准,而且版税信息不会自动强制付款。拥有 ERC-721 代币会获得版权吗?
不会。知识产权取决于适用许可和法律协议。ERC-721 合约可以升级吗?
有些合约可以通过代理系统升级,另一些合约在部署后则不可更改。ERC-721 NFT 可以拆分吗?
部分所有权需要单独的合约或代币机制,因为核心 ERC-721 代币作为一个完整单位持有。ERC-721 授权能被用来盗取 NFT 吗?
可以。恶意获批地址能够转移其权限范围内的 NFT。符合 ERC-721 标准就能证明真实性吗?
不能。任何人都可以部署兼容合约,因此必须独立核验系列地址和发行方。ERC-721 的主要优势是什么?
其主要优势是实现标准化的所有权和转移行为,让许多加密应用能够与代币化的独特资产交互。结论
ERC-721 是 Ethereum 上用于表示独立标识的非同质化代币的主要标准。该标准定义了通用的所有权查询、转移、授权、操作员权限、事件和接口检测规则。每个 NFT 都由其区块链网络、合约地址和代币 ID 唯一标识。核心接口 ID 为
您可能也喜欢
反恐融资(CTF)
框架
波动性爆发
热门
目前热门备受市场关注的加密货币
最高成交量
按交易量计算交易量最大的加密货币

