ERC-721 是以太坊上非同质化代币(NFT)的标准。标准是一套已发布的规则。非同质化意味着每个代币都与其他代币不同。ERC-721 指定了一个接口,即智能合约所提供的函数和事件列表。智能合约是存储在区块链上的程序。对于 ERC-721 而言,代币是通过智能合约在现有区块链上发行的单位。
ERC-721 是以以太坊改进提案(EIP)的形式发布的,这是面向以太坊社区的设计文档。该提案的编号是 721,因此 ERC-721 也被写作 EIP-721。ERC 是应用层标准提案的类别,即以太坊上应用程序所遵循的标准,例如代币标准。
ERC-721 中的代码将其接口命名为 ERC721。ERC-721 代币是由遵循 ERC-721 的合约发行的代币。
函数是合约提供的、用户可以调用的具名操作。事件是合约在发生某些变化时记录在区块链上的通知,以便软件能够跟踪这一变化。记录事件被称为触发事件(emit)。
区块链是按顺序保存的共享交易记录。交易是用户发送给区块链的请求,例如转移代币的请求。地址是区块链上用户或智能合约的标识符。
ERC-721 标准规定了什么?
ERC-721 标准规定了一个接口:合约必须提供的函数和必须触发的事件。这样一来,软件就可以以相同的方式调用遵循 ERC-721 的合约。
ERC-721 还要求通过 ERC-165 实现接口检测,这是一项让合约能够声明自己支持哪些接口的标准。
ERC-721 描述了两个可选扩展。元数据扩展增加了一些函数,用于返回合约所含代币的名称、符号以及每个代币 ID 对应的链接;枚举扩展则增加了列出合约所跟踪代币的函数。
ERC-721 是众多 NFT 标准之一,专为以太坊编写。其他区块链和其他标准的运作方式可能与 ERC-721 不同。
遵循 ERC-721 的合约通过代币 ID(合约为每个代币分配的编号)来区分各个代币。跟踪代币的合约地址与代币 ID 结合起来,可以唯一标识一个代币,并且 ERC-721 要求只要合约存在,代币 ID 就必须保持不变。
ERC-721 与 ERC-20:这两个标准有何不同?
ERC-721 与 ERC-20 的区别在于合约所跟踪的内容、转账所指定的对象,以及授权所涵盖的范围。ERC-20 是同质化代币的标准,意味着其单位可以互换,即一个单位与另一个单位等价。ERC-721 是非同质化代币的标准,合约通过代币 ID 来区分代币,因此交换其中两个代币并不是等价交换。
- ERC-20 合约记录每个地址持有的数量,而 ERC-721 合约记录每个代币 ID 由哪个地址控制。
- ERC-20 的转账指定代币数量,而 ERC-721 的转账指定代币 ID。
- ERC-20 的授权涵盖另一个地址可以转移的数量,而 ERC-721 的授权要么针对单个代币 ID,要么在指定操作者(operator)时,涵盖该地址在同一合约中控制的所有代币。操作者是指被代币控制地址允许转移其全部代币的地址。
ERC-721 定义了哪些函数和事件?
下表按名称列出了 ERC-721 定义的函数和事件,以及来自 ERC-165 的接口检测函数,并说明了每一项的作用。
哪个函数会检查接收方合约?
safeTransferFrom 函数在转移代币后会运行接收方检查。当接收地址是智能合约时,ERC-721 合约会调用其上名为 onERC721Received 的函数,这就是接收方函数。接收合约提供该接收方函数,该函数会返回 ERC-721 所定义的一个特定值,向 ERC-721 合约表明接收合约接受此次转账。如果接收合约返回了其他任何值,交易就会被取消,ERC-721 将其称为回滚(revert)。
transferFrom 函数不会调用接收方函数。ERC-721 将检查接收地址是否能够接收代币的责任交给了调用者,也就是发送该函数调用交易的人。发送到不提供接收方函数的合约的代币可能会丢失。
授权与操作者是如何运作的?
授权允许另一个地址转移某个代币。approve 函数为一个代币 ID 指定一个地址,而 getApproved 返回该地址。ERC-721 规定,当代币被转移后,已批准的地址会被重置为空。
操作者是指通过 setApprovalForAll 被授权转移另一个地址在同一合约中所控制的全部代币的地址。ERC-721 要求合约允许每个控制代币的地址设置多个操作者,isApprovedForAll 返回某个地址是否为另一个地址的操作者。
根据 ERC-721,转账可以由控制该代币的地址发起,也可以由该地址的操作者发起,或由被批准用于该代币 ID 的地址发起。
可选的元数据扩展增加了什么?
ERC-721 的可选元数据扩展为合约增加了三个函数:name、symbol 和 tokenURI。元数据是描述代币的数据,这三个函数会返回这些数据。
name 函数返回合约所跟踪代币的名称,symbol 则返回它们的简称。
tokenURI 函数返回某个代币 ID 对应的 URI。URI 是统一资源标识符(uniform resource identifier)的简称,即一个链接。省略该扩展的合约没有 URI。
ERC-721 规定,tokenURI 返回的 URI 可以指向一个 JSON 文件,这是一种用于结构化数据的文本格式。该文件可以包含名称、描述和图片字段。
ERC-721 允许合约更改其为某个代币 ID 返回的 URI,因此同一个代币 ID 之后可能指向不同的文件。ERC-721 并未规定该 URI 所指向的文件存储在何处。
ERC-721 将哪些内容留给各个合约自行决定?
截至 2026 年 10 月,ERC-721 并未定义代币的内容、与代币相关的任何权利、代币文件的存储位置、代币的创建或销毁方式,也未定义代币的法律地位。非同质化代币(NFT)词汇表条目解释了代币记录(即合约为每个代币保存的信息)未涵盖哪些内容。
遵循 ERC-721 的合约在行为上仍可能有所不同。ERC-721 列出了转账必须失败的情形,并允许合约在其他情况下取消转账,例如在转账被暂停期间。因此,合约可以出于 ERC-721 未列出的原因拒绝某次转账。
2026年1月5日










