在区块链技术的浪潮中,以太坊(Ethereum)以其智能合约的强大功能,催生了众多创新应用,ERC-721标准(Ethereum Request for Comments 721)扮演了里程碑式的角色,它定义了非同质化代币(NFT, Non-Fungible Token)的核心规范,使得数字世界中的“独一无二”成为可能,为数字艺术品、收藏品、游戏道具、虚拟地产等领域的爆发奠定了坚实的技术基础。

什么是ERC-721合约?

ERC-721是一个以太坊代币标准,于2018年正式提出,与同质化代币(如以太币本身,或ERC-20标准的USDT,每个代币完全相同,可以互相替代)不同,ERC-721代币是非同质化的,这意味着每一个ERC-721代币都是独一无二的、不可分割的,拥有不同的属性和价值,你可以把ERC-721合约想象成一个“数字所有权登记处”,它记录了网络上每一个独特代币的归属关系和转移历史。

ERC-721合约的核心特性

ERC-721标准虽然简洁,但定义了确保NFT功能实现的关键接口(Interface)和事件(Event):

  1. 所有权(Ownership)

    • ownerOf(uint256 tokenId):查询指定ID的代币当前归哪个地址所有,这是最基本的功能,确认了“谁拥有这个独一无二的数字物品”。
    • balanceOf(address owner):查询某个地址拥有多少个不同的ERC-721代币(虽然每个代币唯一,但一个地址可以拥有多个不同的代币)。
  2. 转移(Transfer)

    • transferFrom(address from, address to, uint256 tokenId):从当前所有者from地址将指定ID的代币转移到to地址,通常需要调用者拥有该代币或被授权。
    • safeTransferFrom(address from, address to, uint256 tokenId):与transferFrom类似,但增加了安全性,确保接收方能够接收ERC-721代币(通常要求接收方是实现了IERC721Receiver接口的合约地址,否则会回滚)。
    • approve(address to, uint256 tokenId):授权to地址可以转移调用者拥有的指定ID的代币。
    • getApproved(uint256 tokenId):查询指定ID的代币被授权给了哪个地址。
    • setApprovalForAll(address operator, bool approved):授权或取消授权operator地址可以转移调用者拥有的所有ERC-721代币(批量授权)。
    • isApprovedForAll(address owner, address operator):查询owner是否授权了operator可以转移其所有代币。
  3. 元数据(Metadata)

    • ERC-721标准本身并不强制要求元数据,但通常与ERC721Metadata接口结合使用,该接口扩展了:
      • name():返回NFT集合的名称(“CryptoPunks”)。
      • symbol():返回NFT集合的符号(“PUNK”)。
      • tokenURI(uint256 tokenId):返回指定ID代币的统一资源标识符(URI),该URI通常指向一个包含代币详细信息(如图片描述、属性、图片等)的JSON文件,这使得NFT不仅仅是链上的一个记录,还能关联丰富的视觉和语义信息。
      随机配图