NFT 中的元数据

元数据是什么?

元数据就是数据的数据。这样说或许很绕,举一个例子就好理解了。一篇文章有标题、作者、发布时间、标签等等信息,这些数据就是文章的元数据。

看一个更直观的例子,我们以 OpenSea 中的一个 NFT 为例:

左边的图片就是实际的数据,而描述它的元数据看起来是这个样子,是一个 json 格式的文件:

{
   "name":"#1125",
   "symbol":"SC",
   "description":"Soul Café is a collection of 3333 randomly generated, unique and diverse women existing as NFTs on the Ethereum Blockchain.",
   "external_url":"https://soulcafe.io",
   "image":"https://arweave.net/l7lcr2Z45bVerur-8hO4OoOfd5HoJbvdnW_uVaxMn_g"
}

元数据包含了这个图片的名字、符号、描述信息、外部网站与图片链接。最重要的就是这个图片链接,这个链接背后对应的图片就是上图左侧的女孩形象,普通用户能直接感受到的就是它,你可以点这里访问该图片。

在 ERC721 标准中规定了 ERC721 元数据扩展,用于描述 ERC721 本身[3]:

/// @title ERC-721 Non-Fungible Token Standard, optional metadata extension
/// @dev See https://eips.ethereum.org/EIPS/eip-721
///  Note: the ERC-165 identifier for this interface is 0x5b5e139f.
interface ERC721Metadata /* is ERC721 */ {
    /// @notice A descriptive name for a collection of NFTs in this contract
    function name() external view returns (string _name);

    /// @notice An abbreviated name for NFTs in this contract
    function symbol() external view returns (string _symbol);

    /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
    ///  3986. The URI may point to a JSON file that conforms to the "ERC721
    ///  Metadata JSON Schema".
    function tokenURI(uint256 _tokenId) external view returns (string);
}

符合 ERC721 标准的合约就是一组 NFT 的集合。依旧以上图的 NFT 女孩图片为例,它所属的集合是 Soul Cafe Official 。Soul Cafe Official 就是通过 ERC721 元数据扩展中的 name 函数获取到的。该集合中的每个 NFT 都有它自己的标识符 tokenId 与对应的指向 json 格式的元数据的“链接” tokenURI。

我们可以在详情页看到该 NFT 女孩图片的 tokenId 为 1125:

NFT 中的元数据_第1张图片

将 1125 输入查询接口中,即可获得对应的 tokenURI 了:

NFT 中的元数据_第2张图片

这得到了一串对你来说格式看起来可能会陌生的链接:ipfs://QmT11YwPGdUv1ZVvEQ9tU7gH5Q3jWpDovMsT5NpQQec6VD/1125.json 。这其实是 IPFS 协议的链接,与我们平时常见的百度链接https://www.baidu.com 类似,百度的链接以 https 开头,浏览器可以轻松识别该链接,并帮你打开百度网站。而以 ipfs 开头的 IPFS 协议链接,也需要专门的 IPFS 工具去打开,为了让浏览器直接识别,我们可以手动将其转为 https 的形式,于是得到了 https://ipfs.io/ipfs/QmT11YwPGdUv1ZVvEQ9tU7gH5Q3jWpDovMsT5NpQQec6VD/1125.json ,打开后你会发现与前面展示的 NFT 女孩图片的元数据 json 文件内容一致,只不过我在文章中展示出来的是格式化并且简化后的版本。

元数据的作用

节省成本。因为每个以太坊的全节点都必须持有区块链的完整备份,所以像以太坊这样的区块链存储的成本是高昂的,将 NFT 的所有数据都存储在链上的成本会很高。常规的做法是将原始数据链下存储(例如 IPFS),链上只存储其元数据。这样就可以降低链上的存储开销,降低成本。

丰富 NFT 本身。元数据会描述原始数据的相关信息,因此可以丰富原始数据用作其他目的。比如对于一些 NFT 游戏卡来说,其元数据中常常包含等级、稀有度、品质等属性。

记录找到原始数据的方法。狭义的讲就是一个图片的链接。

元数据的存储

tokenURI 可以是 http、ipfs、ar 等协议的链接。不同的协议,存储的方式不同[1]。

http 协议意味着元数据存储在中心化的服务中,当发现你心仪的 NFT 的元数据采用这种方式存储时,需要谨记:即便你拥有了该 NFT,它的元数据也随时能被维护该链接的中心化机构修改。你需要完全信任该机构不会对你做不利的行为

ipfs 协议意味着元数据存储在分布式存储 IPFS 中。该协议遵循内容寻址,简单理解就是,同样的 ipfs 协议的链接打开任意次数得到的内容都是一致的,因此你不需要担心你购买 NFT 后,NFT 的元数据可能会被某一个机构篡改。值得注意的是,IPFS 协议只承诺内容寻址,存储在其上的数据并不一定会永存

ar 协议与 ipfs 类似,主要的不同在于 ar 协议是基于 Arweave 区块链的,且承诺以低廉的价格永远存储你的数据,你不需要担心购买 NFT 后,虽然元数据无法被中心化的机构修改,但是元数据丢失的情况[4]。

使用 IPFS存储示例:Rarible: Example of uploading & using Metadata with IPFS

参考

[1] OpenSea: Metadata Standards

[2] Rarible: Ethereum Metadata

[3] EIP-721

[4] Arweave Wiki

你可能感兴趣的:(区块链开发,以太坊,区块链,数字货币)