
适用范围与唯一标识
以下讨论以采用 ERC-721 的以太坊收藏类应用为范围。以太坊开发文档说明,ERC-721 为非同质化代币提供统一接口,每个代币通过所属合约地址与 tokenId 加以区分。合约支持查询持有者、转移代币和管理授权,并通过事件记录相关变化。
理解唯一性时,需要把编号放回所属合约中。两个不同合约可以出现相同的 tokenId,因此仅看编号不足以确定具体藏品。用于区分代币的身份信息,也不能直接说明展示图片是否独一无二。
智能合约与持有关系
智能合约维护代币状态,收藏应用则把这些状态转化为用户可读的页面。查询某个地址持有多少枚代币,与查询某枚代币由谁持有,是两个不同的问题,分别对应数量和具体归属。
应用调用合约时会使用 ABI,即描述函数、参数和事件格式的接口信息。统一标准让不同应用能够用相近的方法读取代币,但具体的游戏属性或收藏规则仍可能需要额外接口。
元数据与内容存储
OpenZeppelin 的 ERC-721 文档展示了通过 tokenURI 关联 JSON 元数据的方式,其中可包含名称、说明和图片地址。文档同时指出,链外元数据可能被修改;把内容放到链上需要考虑成本,也可以采用 IPFS 等存储方式。
这意味着一件数字藏品通常涉及多个层次:合约中的代币记录、描述藏品的元数据,以及图片等媒体文件。链上能够查到持有记录,并不等于展示内容全部保存在链上。理解内容的稳定性,需要分别看这些层次如何存储和更新。
转移授权与铸造权限
转移是改变代币持有关系,授权则是允许其他地址执行相应操作。ERC-721 区分单枚代币授权与面向操作者的统一授权,两者覆盖范围不同,授权本身也不等于已经发生转移。
铸造负责创建新的代币。谁可以铸造,要由具体合约的访问控制决定,不能仅凭采用 ERC-721 就认定发行受到限制。标准统一了基础交互方式,应用仍需定义自身权限规则。
常见问题与理解边界
所有 ERC-721 合约都能直接查询总发行量吗?不一定。总量查询属于可选的枚举扩展,不能把某个示例提供的功能视为所有合约必备能力。
转移事件是否就是成交记录?不能直接等同。事件可以反映代币归属变化,但单凭转移信息无法确定是否支付了对价。展示页面、合约状态和业务含义之间,需要结合具体应用规则理解。