2021-08-12 19:45 | 出处: 律动BlockBeats
针对当前市场上被热炒的收藏品类 NFT,其图片的存储方式是否去中心化,购买后有没有被篡改的风险,是许多买家十分关心的问题。而一般用于存储图片的便是 NFT 中的元数据(Metadata)字段,因此我们需要一种简单高效的方式,帮助用户查看 NFT 中的元数据。
当前确实有部分产品已经提供了一定的元数据安全评估功能,如 Opensea 中就会显示 NFT 的元数据是否被冻结。但是由于目前各类 NFT 项目的底层智能合约包含的函数名称并不完全相同,且各项目本身对元数据的存储方式有极大差异,因此单一的查询产品并不能兼容所有的 NFT 产品,甚至有可能向用户提供误导信息。
在本文中,我们将向用户介绍一种更为通用的元数据验证方式,那便是直接通过区块链浏览器进行验证。
首先需要明确一点,我们日常所说 NFT 具有的唯一性,是由三个基本要素决定的。他们是部署 NFT 的公链、生成 NFT 的智能合约,以及该 NFT 在智能合约中的编号。
本文中将以目前 NFT 项目最丰富的以太坊,以及 NFT 的 ERC-721 协议为例,向读者介绍通过 Etherscan 查询 NFT 元数据的方法。
首先读者可以通过最常用的 Opensea 找到自己希望验证的 NFT 收藏品页面。这里以 Bored Ape Yacht Club 中的一个藏品为例,可以看到左下角详情页中标明了这个 NFT 最关键的三个信息:1. 合约地址;2.NFT 在合约中的编号,也就是 Token ID;3. 所在公链,也就是以太坊;
点击合约地址(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 长期价值的潜在影响。
1. 不存储
是的,确实有些 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 项目。我们同样在其合约中找不到元数据,唯一一个类似元数据的函数返回的是一个空值。
经过分析我们发现,CryptoKitties 同样没有选择将猫咪的图片进行链上存储,而是将组成猫咪图像的基本元素保存在中心化的官方网站上。链上记录的只是每一只猫咪独特的特征值,或者可以称为决定猫咪外观的「基因」。当用户购买一只 CryptoKitty 后,负责前端显示的网站直接调取该 NFT 的特征基因,并按照既定规则生成展示给用户的猫咪图片。
因此,对于 CryptoKitties 这个项目的存储方式可以概括为:猫咪的「基因」进行链上存储,但具体显示内容通过服务器进行合成,其显示效果完全依托于中心化服务器。
但由于 CryptoKittiies 并不是一个单纯的图片型 NFT 项目,其繁殖功能可以仅依靠上一代的「基因」和链上的算法进行合成,猫咪外观的稀有度也唯一取决于基因的组成成分,因此该项目元数据的缺失不会对其游戏功能与估值产生很大影响。
以上两种回避元数据存储难题,通过其他变通方式解决 NFT 前端显示问题方案的最大优点,便是节省了宝贵的链上存储空间,降低了项目开发的复杂度。但缺点也很明显,因为任何想要适配或展示相关 NFT 的网站,都必须手工对其显示效果进行配置和缓存,其最终显示效果也完全依赖于传统的中心化组织。一旦某个关键节点失效,便可能导致用户重金购买的 NFT 无法正常显示。
当然,这类存储方式更多存在于早期的 NFT 项目中,目前新推出的 NFT 项目,已经极少再有采用这种变通方案的了。
2. 链上存储
链上存储也常被习惯性地称为「永久存储」,因为一旦用户将数据提交上链,依靠区块链的不可篡改属性,上链的数据理论上便得到了永久保存。只要我们可以预期这条链能够永久地运行下去,那么相应的数据便等同于进行了永久保存。
当前采用链上存储的项目也可分为两类,一种是将元数据存储到 NFT 智能合约的同一条公链上,另一种是存储在专用存储公链如 Arweave 上。当前采用第二种方案的典型项目还不多,因此本文便不做过多介绍,下面仅对存储于以太坊上的典型项目进行分析。
Autoglyphs
Autoglyphs 项目同样由开发了 CryptoPunks 的 Larva Labs 团队开发。这个产品相对 CryptoPunks 来说并没有那么知名,其外观的构成元素也较为单一。下图展示了其中的部分产品形态。
我们依然通过上文提到的方法,通过 Etherscan 调出其元数据,返回的结果如下图
可以看出,Autoglyphs 的 NFT 图片元素就是直接存储在以太坊之上的,只是在显示的时候需要重新调整一下换行的位置。因此其显示效果可以更少受到前端网页的影响,所存数据的永久性与安全性都得到了更好地保障。但同时缺点也很明显,那便是以太坊的链上存储成本十分昂贵,难以存储更加复杂的图形。
3. 去中心化存储
去中心化存储技术的出现时间,要远早于区块链的发明时间。去中心化存储虽然具备了与区块链相同的去中心化特征,但是去中心化存储却并不能直接与链上存储划等号。
目前利用去中心化存储方式存储 NFT 元数据的主流项目,便包括前文已经介绍过的 Bored Ape Yacht Club,这也是目前大多数艺术品类 NFT 所采用的存储方式。
采用去中心化存储有以下几个显著的优点:
1. 不可篡改性:由于其用于寻址存储文件的域名中包含了文件的哈希值,因此其与区块链一样,具有不可篡改的特性,更符合加密原生精神;
2. 存储成本更低:对于目前的大多数图片类项目,基本上一台可以长期联网的个人电脑就可以保证数据的长期存储。即便采用结合了区块链激励机制的 filecoin 等存储激励层,其成本相对于在以太坊存储的成本依然小到可以忽略不计;
当然去中心化存储也存在一些缺点,那就是数据存储的永久性并不能很好的得到保证。对于没有结合 filecoin 激励层的 ipfs 存储,一旦负责存储的节点全部离线,所存的数据依然有可能丢失。
4. 中心化存储
这里所谓的中心化存储,便是将元数据存储到一个中心化的网站服务器里,并在元数据中保存指向该网址的链接。下面以这两天爆火的小企鹅项目为例。
Pudgy Penguins
下图是在其 tokenURI 函数查询返回的结果截图。
从查询结果可以看出,这个项目的元数据返回的是一个中心化网址链接,说明该 NFT 的图片是直接存储在项目官网的服务器上。这种存储方式长期看将面临两个主要风险。一是数据可以被网站的所有者所篡改,二是网站有可能在某一天失去维护导致链接无法访问。
因此对于这类采用中心化存储方式的图片类 NFT 项目,投资人在购买时需要谨慎评估项目方的实力以及长期维护项目运转的意愿。由于这类 NFT 除图片本身外没有任何应用价值,一旦对应链接返回的图片被更改,则项目有可能随时归零。
人们常说的区块链的不可篡改性,只体现在元数据内保存的网址链接上,而至于这个中心化的网址链接指向何处,区块链对此一无所知也根本无法控制。因此这种类型的 NFT,从结构上说依然是中心化的。
我们可以将其概括为一条定律,那就是:一个产品的去中心化程度,取决于其所有组件最中心化的环节,只要有一个环节采用了中心化的技术栈,那么整个产品就是一个中心化的产品。因此,采用这类存储方式的图片类 NFT,不再具有去中心化不可篡改的区块链基本特征。
换句话说,大家重金购买的只是一个固定在区块链上的网址链接,连图片都不是。
5. 无所谓在哪里存储