原文标题:CryptoPunks 等主流 NFT 项目的元数据都存在哪里?
原文标题:《你花几万块钱买的 NFT 头像,到底存在了哪里?》
撰文:区块律动
针对当前市场上被热炒的收藏品类 NFT,其图片的存储方式是否去中心化,购买后有没有被篡改的风险,是许多买家十分关心的问题。而一般用于存储图片的便是 NFT 中的元数据(Metadata)字段,因此我们需要一种简单高效的方式,帮助用户查看 NFT 中的元数据。
当前确实有部分产品已经提供了一定的元数据安全评估功能,如 Opensea 中就会显示 NFT 的元数据是否被冻结。但是由于目前各类 NFT 项目的底层智能合约包含的函数名称并不完全相同,且各项目本身对元数据的存储方式有极大差异,因此单一的查询产品并不能兼容所有的 NFT 产品,甚至有可能向用户提供误导信息。
在本文中,我们将向用户介绍一种更为通用的元数据验证方式,那便是直接通过区块链浏览器进行验证。
在 Etherscan 中查询 NFT 的元数据
首先需要明确一点,我们日常所说 NFT 具有的唯一性,是由三个基本要素决定的。他们是部署 NFT 的公链、生成 NFT 的智能合约,以及该 NFT 在智能合约中的编号。
本文中将以目前 NFT 项目最丰富的以太坊,以及 NFT 的 ERC-721 协议为例,向读者介绍通过 Etherscan 查询 NFT 元数据的方法。
首先读者可以通过最常用的 Opensea 找到自己希望验证的 NFT 收藏品页面。这里以 Bored Ape Yacht Club 中的一个藏品为例,可以看到左下角详情页中标明了这个 NFT 最关键的三个信息:
合约地址;
2.NFT 在合约中的编号,也就是 Token ID;
所在公链,也就是以太坊;
点击合约地址(Contract Address)右侧的链接,页面会自动跳转到对应合约地址的 Etherscan 浏览器页面。
点击页面中的 Contract 标签,便可以浏览这个合约的底层代码。
我们不需要读懂代码的具体含义,直接点击上图中的 Read Contract 标签,便可以浏览这个合约中的可查询函数。
找到在页面中排行第 20 位的函数 tokenURI,这便是该 NFT 合约查询元数据的专用函数。
当然,用于查询元数据的函数在不同智能合约中的命名也不尽相同,但一般会带有 URI、metadata 等字段,需要具体情况具体分析。不过好在最近的新项目基本都会将该函数命名为 tokenURI,为用户减少了不少麻烦。
点开 tokenURI 函数后,我们可以看到以下界面。在上方的输入框中输入我们想要查询的 NFT 编号,也就是刚刚在 Opensea 看到的 Token ID 编号 6476,然后点击下方的查询按钮 Query。
可以看到,在点击完查询按钮后,系统返回了一串代码:
ipfs://QmeSjSinHpPnmXmspMjwiXyN6zS4E9zccariGR3jxcaWtq/6476
这串代码便是在 NFT 的智能合约中保存的元数据。可以看出,这个 NFT 的元数据保存的是一段 ipfs 存储链接,因此可以判断该 NFT 采用的是去中心化的存储方式。读者可以使用 Brave 等支持 ipfs 浏览的浏览器进行查看,这个地址返回的便是该 NFT 所代表的猿猴图片。
以上便是通过 Etherscan 查询 NFT 元数据的整个流程,可以看出其实对用户来说,操作上并没有太高的门槛。但更为关键的问题是,通过了解一个 NFT 的元数据存储方式,能够为今后投资或购买 NFT 产生什么帮助?
下文我们便以几个有代表性的 NFT 项目为例,介绍一下主流 NFT 项目的元数据存储方式,以及存储方式对 NFT 长期价值的潜在影响。
主流 NFT 项目的元数据存储方式
不存储
是的,确实有些 NFT 项目在链上完全找不到任何关于其图片存储位置的信息,甚至合约中都没有存放元数据的函数。这种存储方式只在 NFT 出现的早期被某些化石级项目所采用,最典型的便是 CryptoPunks。
CryptoPunks
我们通过刚才的方式查询 CryptoPunks 的合约地址,发现并不能找到 TokenURI 或类似字段。但是可以看到在第 5 个函数 imageHash 中返回了一串哈希值,这便是由整个 10000 张 CryptoPunk 图片拼接而成的一张大图的哈希值。这张图片目前保存在项目的官方网站上(图片链接),用户可以自行下载该图片并计算其哈希值并与链上的哈希值进行对比以验证图片的真实性。
由此我们可以得出结论,CryptoPunks 项目并没有在链上存储任何图片,仅仅在其智能合约中向用户提供了一个图片的验证方式。其本质上并没有对图片进行存储,而只是提供了一个链上验证的方式。
既然没有存储,那么在我们购买了一个 CryptoPunks 的 NFT 后,为什么可以在 Opensea 上准确显示对应的图片呢?其实这完全依赖于 Opensea 这种网站在网页前端的人工适配,CryptoPunks 图片并没有存在链上,而是存在中心化的网站缓存中。因此 CryptoPunks 的 NFT 是必须依赖于一个中心化的机构,才可以被正常显示出来。
因此投资者购买的 CryptoPunks NFT 仅仅是一个智能合约内的编号而已,既没有图片,也没有其他实用功能。人们对他的认可,网站上所显示的图片内容,更多依靠的是社区的共识。比如对于第二号 CryptoPunks NFT,到底是从左往右数的第二个,还是从上往下数的第二个,在链上都不能提供明确的判断标准,大家只是根据习惯认为他就是代表某一个头像。
这类 NFT 项目在当前的市场中几乎已经绝迹,因为他的存在及价值需要极为强大的社区共识支撑。如果有新项目依然采用这种「存储」方式,建议投资者谨慎购买。
加密猫 CryptoKitties
CryptoKitties 也是一个有着悠久历史的 NFT 项目。我们同样在其合约中找不到元数据,唯一一个类似元数据的函数返回的是一个空值。
CryptoPunks 等主流 NFT 项目的元数据都存在哪里?
经过分析我们发现,CryptoKitties 同样没有选择将猫咪的图片进行链上存储,而是将组成猫咪图像的基本元素保存在中心化的官方网站上。链上记录的只是每一只猫咪独特的特征值,或者可以称为决定猫咪外观的「基因」。当用户购买一只 CryptoKitty 后,负责前端显示的网站直接调取该 NFT 的特征基因,并按照既定规则生成展示给用户的猫咪图片。
因此,对于 CryptoKitties 这个项目的存储方式可以概括为:猫咪的「基因」进行链上存储,但具体显示内容通过服务器进行合成,其显示效果完全依托于中心化服务器。
但由于 CryptoKittiies 并不是一个单纯的图片型 NFT 项目,其繁殖功能可以仅依靠上一代的「基因」和链上的算法进行合成,猫咪外观的稀有度也唯一取决于基因的组成成分,因此该项目元数据的缺失不会对其游戏功能与估值产生很大影响。
以上两种回避元数据存储难题,通过其他变通方式解决 NFT 前端显示问题方案的最大优点,便是节省了宝贵的链上存储空间,降低了项目开发的复杂度。但缺点也很明显,因为任何想要适配或展示相关 NFT 的网站,都必须手工对其显示效果进行配置和缓存,其最终显示效果也完全依赖于传统的中心化组织。一旦某个关键节点失效,便可能导致用户重金购买的 NFT 无法正常显示。
当然,这类存储方式更多存在于早期的 NFT 项目中,目前新推出的 NFT 项目,已经极少再有采用这种变通方案的了。
链上存储
链上存储也常被习惯性地称为「永久存储」,因为一旦用户将数据提交上链,依靠区块链的不可篡改属性,上链的数据理论上便得到了永久保存。只要我们可以预期这条链能够永久地运行下去,那么相应的数据便等同于进行了永久保存。
当前采用链上存储的项目也可分为两类,一种是将元数据存储到 NFT 智能合约的同一条公链上,另一种是存储在专用存储公链如 Arweave 上。当前采用第二种方案的典型项目还不多,因此本文便不做过多介绍,下面仅对存储于以太坊上的典型项目进行分析。
Autoglyphs
Autoglyphs 项目同样由开发了 CryptoPunks 的 Larva Labs 团队开发。这个产品相对 CryptoPunks 来说并没有那么知名,其外观的构成元素也较为单一。下图展示了其中的部分产品形态。
我们依然通过上文提到的方法,通过 Etherscan 调出其元数据,返回的结果如下图
可以看出,Autoglyphs 的 NFT 图片元素就是直接存储在以太坊之上的,只是在显示的时候需要重新调整一下换行的位置。因此其显示效果可以更少受到前端网页的影响,所存数据的永久性与安全性都得到了更好地保障。但同时缺点也很明显,那便是以太坊的链上存储成本十分昂贵,难以存储更加复杂的图形。
去中心化存储
去中心化存储技术的出现时间,要远早于区块链的发明时间。去中心化存储虽然具备了与区块链相同的去中心化特征,但是去中心化存储却并不能直接与链上存储划等号。
目前利用去中心化存储方式存储 NFT 元数据的主流项目,便包括前文已经介绍过的 Bored Ape Yacht Club,这也是目前大多数艺术品类 NFT 所采用的存储方式。
采用去中心化存储有以下几个显著的优点:
- 不可篡改性:由于其用于寻址存储文件的域名中包含了文件的哈希值,因此其与区块链一样,具有不可篡改的特性,更符合加密原生精神;
- 存储成本更低:对于目前的大多数图片类项目,基本上一台可以长期联网的个人电脑就可以保证数据的长期存储。即便采用结合了区块链激励机制的 filecoin 等存储激励层,其成本相对于在以太坊存储的成本依然小到可以忽略不计;
当然去中心化存储也存在一些缺点,那就是数据存储的永久性并不能很好的得到保证。对于没有结合 filecoin 激励层的 ipfs 存储,一旦负责存储的节点全部离线,所存的数据依然有可能丢失。
中心化存储
这里所谓的中心化存储,便是将元数据存储到一个中心化的网站服务器里,并在元数据中保存指向该网址的链接。下面以这两天爆火的小企鹅项目为例。
Pudgy Penguins
下图是在其 tokenURI 函数查询返回的结果截图。
从查询结果可以看出,这个项目的元数据返回的是一个中心化网址链接,说明该 NFT 的图片是直接存储在项目官网的服务器上。这种存储方式长期看将面临两个主要风险。一是数据可以被网站的所有者所篡改,二是网站有可能在某一天失去维护导致链接无法访问。
因此对于这类采用中心化存储方式的图片类 NFT 项目,投资人在购买时需要谨慎评估项目方的实力以及长期维护项目运转的意愿。由于这类 NFT 除图片本身外没有任何应用价值,一旦对应链接返回的图片被更改,则项目有可能随时归零。
人们常说的区块链的不可篡改性,只体现在元数据内保存的网址链接上,而至于这个中心化的网址链接指向何处,区块链对此一无所知也根本无法控制。因此这种类型的 NFT,从结构上说依然是中心化的。
我们可以将其概括为一条定律,那就是:一个产品的去中心化程度,取决于其所有组件最中心化的环节,只要有一个环节采用了中心化的技术栈,那么整个产品就是一个中心化的产品。因此,采用这类存储方式的图片类 NFT,不再具有去中心化不可篡改的区块链基本特征。
换句话说,大家重金购买的只是一个固定在区块链上的网址链接,连图片都不是。
无所谓在哪里存储
之所以在这里称其为无所谓在哪里存储,是因为这类 NFT 的价值与其元数据的存储方式没有直接的关系,即便这些 NFT 不保存元数据或修改了元数据,也不会对这些 NFT 的价值产生显著影响。下面我们以两个著名的应用了 NFT 的项目为例。
Axie Infinity 游戏中的 NFT
下图是查询某个 Axie NFT 元数据返回的内容,可以看出,其元数据存储的只是一个中心化的网址链接,因此其前端显示图片有被篡改的风险。
但是与图片类 NFT 不同的是,作为游戏中角色或道具的 NFT,其主要价值并不来源于其能够在网页前端显示的图片,而是其在游戏中具有的功能和属性。比如一个 NFT 代表的游戏角色的攻击力越高,便越有可能在对战中取得胜利,因此其价值便越高。而这种 NFT 元数据中存储的信息,只是类似于一个游戏角色的皮肤,即使被修改也不会影响其游戏属性。
这就类似在王者荣耀中,更换游戏角色皮肤不会对游戏的运行产生显著影响一样。因此在游戏中采用的 NFT,更重要的是这个 NFT 在游戏中的实际功能,或者说是其内在价值,而不是表现在网页前端的皮肤属性。
Uniswap V3 Position NFT
Uniswap NFT 元数据的存储方式极为独特,值得重点解读一下。我们还是先通过 Etherscan 查询一下链上数据,得到的返回结果如下:
看似返回的数据是无法解读的乱码,但最上方的注释给我们提供了其使用的编码方式:base64。我们随便搜索一个在线的 base64 解码工具,可以将乱码解析为以下可读的结果(由于太长只截取部分数据):
可以看到,在元数据的最前方标注了该做市头寸的代币对、做市价格区间、代币地址以及声明等信息。在后方的 image 字段内,保存的是以 svg 格式存储的 NFT 图像信息。
这里稍微解释一下 svg 格式。svg 是一种图片保存格式,其中文全称为「可缩放矢量图形」。我们知道,现在常用的图片保存格式是基于像素的,比如我们的手机照片保存格式,便是把镜头采集到的每个像素的颜色一个一个保存在文件内,因此像素越高图片就越清晰,同时所占用的存储空间也就越大,也越难以在链上保存。
而 svg 格式并不是通过保存像素来存储图片,而是保存图形的形状。例如:保存一个长宽比为 2:1 的矩形,底色为红色,在左上角显示代币对的名称等等。这种存储图像方式的优点是,形状一旦确定便可以无限放大缩小,且其占用的存储空间不受图形大小影响,只与图形的复杂度有关。因此这种存储形式可以帮助在以太坊上低成本的存储结构较为简单的矢量图片。
又由于 Uniswap 的 NFT 全部采用同一个矢量图模板,因此这个 NFT 的图片样式只需要在部署合约的时候存储一次,之后每个新铸造的 NFT 只用更新一下图形中的代币对等核心信息就可以生成新的 NFT 图片。因此用户并不需要为存储这个图片支付存储成本。
Uniswap 的 NFT 元数据存储方式,可以说是众多 NFT 项目中最让人眼前一亮的解决方案。他同时兼顾了几个重要的需求。一是全链上保存,具有完全的去中心化与不可篡改性;二是不依赖网页前端存储的缓存数据就可以直接从链上读取全部信息;三是不会涉及跨链调用数据的风险,不用担心采用链外存储的协议失效或被攻击,只要信任以太坊的安全性,便可以完全信任该 NFT 的安全性。四是可以保存较为复杂的图像,不像 Autoglyphs 项目那样只能显示简单的图形信息。
当然谈了这么多,最后还是要回到 NFT 的价值来源问题。其实对于 Uniswap 的 NFT 价值来说,其元数据保存在哪里,甚至是不是保存了元数据,都完全不影响其价值。因为 Uniswap 的 NFT 的价值,只取决于其可以从资金池中取回资产的价值。就像你持有的银行存单,不论印刷质量是精美还是粗糙,只要能取回等值的货币,则存单本身美观与否完全无关紧要。
最后再总结一下 Uniswap NFT 的基本特点。Uniswap 的 NFT 其前端显示图片是在以太坊链上存储,不可篡改但可以由团队进行后续升级(见下图)。根据其创始人的介绍,存储元数据图像的合约是整个 Uniswap V3 智能合约组中唯一可以进行后续升级的智能合约组件。但不论其后续图像如何改变,都不会影响其 NFT 的内在价值。
NFT 资产的价值来源
曾经有研报将 NFT 概括为「元数据的容器」,这个极为精辟的概括较好地解释了当前艺术品收藏类 NFT 的价值来源。但是对于上文提到的应用型 NFT,这个结论却难以给出合理的解释。
我们认为当前 NFT 资产的价值来源主要分为两种不同类型。一种是依靠 NFT 本身所具有的应用价值,比如持有 NFT 可以兑换某些资产,或者在游戏中具有某种可以提高胜率的属性,又或者作为举办链下活动的入场门票等等。这些 NFT 的价值,都来源于其能够给持有者带来的使用价值。
另一种便是现在主流 NFT 项目的价值获取方式。即 NFT 本身没有实际的使用价值,只依靠其在元数据中保存的图片等显示内容获得某种共识(当然部分 NFT 项目连这个都没有做到)。这种类型的 NFT 长期来看具有比较明显的空气特征,我们认为其不会是今后主流的 NFT 资产类别。
当前流行的大量图片类 NFT 产品,让人难免回忆起 17 年泛滥的众多空气币项目。项目方仅需要复制并简单修改一版白皮书,就可以靠发币收割大量的财富。空气币价格的涨跌主要取决于炒作,而不是其内在的使用价值。
当前许多 NFT 项目也出现了类似的问题,项目方仅需要用算法生成几千张简单的图片,便可以通过销售获得大量的资金。这种项目的操作方式几乎没有任何门槛,今后类似的项目只会越来越多,最终使得这轮 NFT 的炒作彻底空气币化。
虽然当前的炒作现象提高了普通用户对 NFT 概念的了解,促进了 NFT 相关基础设施的完善。但是由于其缺乏长期的内在价值,因此除了少数早期的头部项目外,更多的图片类 NFT 项目长期来看将有极高的归零风险。
同时,购买这种图片类 NFT 的用户需要特别注意,由于其元数据存储的方式问题,许多 NFT 产品的所见都不等于所得。大量图片类 NFT 项目需要依赖较为中心化的交易平台,通过人工方式对其显示的图片进行「脑补」。一旦失去了 Opensea 这种平台的维护,许多用户所买到的 NFT 将只剩下一串网址链接而不是图片。
NFT 的未来应该更多的依靠不受元数据影响的应用型 NFT,可以看到近期对这类应用的探索也越来越多。比如最近有项目将做市算法铸造成 NFT,若以后使用这个算法的用户都能按照一定比例向这个算法 NFT 缴纳手续费,则该 NFT 价值便可以等于其未来现金流的折现,使其内在价值得到有力的支撑。至于其元数据是否存储了一个酷炫的图片,恐怕便不会再有人关心。
当前,具有内在价值的应用型 NFT 主要存在于两个赛道。一个是金融类 NFT,另一个是游戏资产类 NFT。这两种 NFT 资产都有着更好的长期内在价值支撑,其价值不再取决于元数据这种显示在网页前端的皮肤,而是实打实的带给所有者的使用价值。相比目前更为火热的图片类 NFT,这种应用型 NFT 更有可能在长期跑赢当前的炒作周期。
https://www.chainnews.com/articles/363603486355.htm