NFT 圣经:非同质化代币是什么?

非同质化代币 NFT 是一个拥有区块链管理权,独特的区块链项目。例如,收藏、游戏物品、数字艺术、活动门票、域名,甚至是实物资产的所有权记录。

如果你生活在加密货币的世界里有一段时间了,你可能会听到“非同质化代币”或者“NFT”这个词。或许你是个怀疑者、信徒,又或许你还不知道那个非同质化代币到底是什么。

本文旨在对非同质化代币提供一个深入的概述:ERC721 的技术剖析, NFT 的历史,对 NFT 的普遍误解,以及 NFT市场的现状。我们希望这对该领域内的新手,以及已经了解 NFT 但想更好地了解其内部工作细节的人来说是有意义的。

目 录

  1. 什么是非同质化代币?
    1.1 基于区块链的非同质化代币
    1.1.1 标准化
    1.1.2 互通性
    1.1.3 可交易性
    1.1.4 流动性
    1.1.5 不变性和可证明的稀缺性
    1.1.6 可编程性
  2. 非同质化代币标准
    2.1 ERC721
    2.2 ERC1155
    2.21 可组合物品
    2.3 非以太坊标准
  3. 非同质化代币元数据
    3.1 链上与链下
    3.1.1 链上元数据
    3.1.2 链下元数据
    3.2 链下存储解决方案
    3.2.1 集中式服务器
    3.2.2 IPFS

什么是非同质化代币?

不可替代资产只是正常的东西。可替代的资产是奇怪的!

大多数关于非同质化代币的讨论都是从引入同质的想法开始的,而同质的概念被定义为“能够替换或者被同一项目的另一项替换”。我们认为这会使事情更加复杂。要更好地理解非同质化资产的含义,只需考虑您所拥有的大部分资产。你坐的椅子、手机、手提电脑以及任何可以在淘宝上销售的东西。这一切都是非同质的东西。
图片

同质化资产实际上被证明是奇怪的资产。货币是一个经典的同质资产的例子。不管具体的5美元钞票上的序号是5美元还是存入你的银行帐户,5美元总是5美元。能够用另外一张5美元的纸币(也就是5张)来代替5美元的纸币,从而实现货币互换。
注意互换是相对的,它只适用于比较多个事物。商务舱,经济舱,头等舱机票。每一张票在同一个班次上大概是可以互换的,但你不能以商业舱票的形式来交换头等票。即使你坐的椅子也可以和同类型的椅子互换使用,除非你已经为特定的椅子开发了一些特殊的配件。
有趣的是,同质化资产定义也可以是主观的。回到机票示例:关心坐靠窗或靠走道座位的人可能认为两张经济舱机票不能互换。同样的,一分钱不多的硬币对我来说可能值一分钱,但是对一个硬币收集者来说价值更高。我们将会看到,其中的一些细微差别在区块链上表示这些项目时变得非常重要。

基于区块链的非同质化代币

正如我们在加密货币出现前拥有数字货币(比如航空积分、游戏中的金币),自从互联网诞生以来,我们就拥有了非同质化的数字资产。域名、活动门票、游戏内物品,甚至像 Twitter、Facebook、Weibo 这样的社交网络,都是非同质化的数字资产;只是在可交易性、流动性和互用性方面各不相同。许多游戏都很有价值:仅在2018年, Epic Games 就通过免费游戏“Fortnite”销售服装,实现了24亿美元的收入;预计到2025年,活动门票市场将达到680亿美元;域名市场将继续保持稳定增长。
我们拥有大量的数字资产,但我们从未真正拥有过。
显然,我们已经有了一大批数字资产。但是,我们“拥有”这些数字资产的程度如何呢?如果数字所有权只表明某项商品属于你而不属于其他人,那么从某种意义上说,你就拥有了这些资产。但是,数字资产并不总是如此,如果数字所有权更像是现实世界中的所有权(可以无限期地持有和转让)。但是,您在特定的上下文中拥有这些资产,而这些资产可能或不会移动到其他地方。尝试在淘宝上出售 Fortnite 皮肤,你会发现把数字资产从一个人转移到另一个人的难度很大。

这就是区块链到来的原因!区块链提供给数字资产一个协调层,向用户授予所有权和管理权限。区块链增加了一些非同质化资产的独特属性,从而改变了用户和开发人员与这些资产之间的关系。

标准化

在数字世界里,从门票到域名,传统的数字资产并没有统一的表达方式。游戏可以用与事件售票系统完全不同的方式来表示游戏中的收藏。而通过在公链上显示非同质化资产,开发人员可以构建通用、可重用、可继承的所有非同质化代币标准。这包括基本的原语,如所有权、传输和简单的访问控制。其他标准(例如,如何显示 NFT 的规格说明)可以放在最上面,从而在应用程序中实现丰富的显示。
这些与数字世界中的其他构建块类似,比如 JPEG或 PNG 图像的文件格式、计算机间请求的 HTTP 协议和用于在 Web 上显示内容的 HTML/CSS。区块链的顶部添加了一层,为开发人员提供了一套全新的有状态原语,用于构建自己的应用程序。

互通性

一个非同质化资产标准允许他们在多个生态系统之间移动自如。当开发人员启动新的 NFT 项目时,这些 NFT 可以立即在数十种不同的钱包提供者中看到,可以在市场中交易,并且最近已经显示在虚拟世界中了。这是可能的,因为开放标准提供了清晰、一致、可靠和经过许可的读写数据 API。

可交易性

互通性在开放的市场自由贸易中最具说服力。用户第一次可以向外移动到物品的原始环境中,进入一个市场,他们可以利用复杂的交易功能,如易趣式拍卖、招标、捆绑、出售任何货币的能力,比如 stablecoins 和专用货币。
尤其对于游戏开发商来说,资产的可交易性代表着一个从封闭经济向开放市场经济的转变过程。游戏开发商不再需要管理经济中的每一个环节:从资源供应到定价再到资金控制。相反,他们可以让自由市场来承担这部分责任!

流动性

非同质化资产的极速可交易性会带来流动性的提升。NFT 市场可以满足各种受众的需求,从严格的交易者到较不成熟的交易者,都可以让资产更广泛地面向更多的购买者。与2017年的 ICO 热潮催生出由即时流动货币驱动的新一类资产一样, NFT 拓展了数字资产这一独特的市场。

不变性和可证明的稀缺性

智能合约允许开发人员对非同质化代币的供应设置严格的上限,并强制使用在发布 NFT 后不能修改的永久属性。例如,开发人员可以通过编程方式强制执行以下操作:只能创建特定数量的特定珍稀物品,而不能提供更多的普通物品。开发人员还可以强制特定属性不随时间变化,方法是对链进行编码。对艺术来说,这是特别有趣的,因为艺术在很大程度上依赖于如何证明原始作品的稀缺性。

可编程性

当然,和传统数字资产一样, NFT 也是完全可编程的。CryptoKitties (我们稍后会讨论)在繁育技术人员中直接繁殖成数字猫的代表。当今许多 NFT 的机制更加复杂,如锻造、制作、兑换、随机生成等等。设计空间是无限可能的。

非同质化代币标准
标准就是让非同质化资产变健壮起来的那部分。它们向开发人员保证,资产将以特定的方式运行,并且精确地描述与资产的基本功能交互的方式。

ERC721

由 CryptoKitties 提出的 ERC721 是第一个代表非同质化数字资产的标准。ERC721 是可继承的智能合约标准,这意味着开发人员可以很容易地从导入它来创建与 ERC721-合约一致的新的 OpenZeppelin 库(我们在此创建了 ERC721 合约的第一个有用的教程)。ERC721 实际上相当简单:它提供了一个唯一标识符(每个标识符代表一个资产)到一个地址的映射,以此代表标识符的所有者。ERC721还提供了使用 transferFrom 方法进行资产转让的许可方式。

interface ERC721 {
function ownerOf(uint256 _tokenId) external view returns (address);
function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
}

如果您考虑一下,这两种方法实际上就是表示 NFT 所需的全部:一种是检查谁拥有什么,另一种是发送什么。该标准还有一些其他的特点(一些特点对 NFT 市场非常重要),而 ERC721的核心部分是非常基础的。

ERC1155

ERC1155,由 Enjin 公司的团队首创,提出了 NFT 世界的半同质化方案。在 ERC1155 中, ID并不表示资产,而是资产的类别。例如,一个 ID 可能代表一把“剑”,而一个钱包可能有1000把这把剑。在本例中, balanceOf 方法将返回钱包拥有的剑数,用户可以通过 transferFrom 调用“剑 ID”来转移这些剑的任意数量。

interface ERC1155 {
function balanceOf(address _owner, uint256 _id) external view returns (address);
function transferFrom(address _from, address _to, uint256 _id, uint256 quantity) external payable;
}

这类系统的一个优点是效率:使用 ERC721,如果用户希望转移1,000把剑,他们就需要修改智能合约的状态(通过调用 transferFrom 方法)来获得1,000个唯一令牌。有了 ERC1155,开发人员只需要调用1000个 transferFrom ,然后执行一次传输操作。当然,这一效率的提高也带来了信息的丢失:我们不再能够追踪单独一把剑的交易历史了。
还要注意的是,ERC1155 提供了 ERC721 的超集功能,这意味着 ERC1155 可用于构建 ERC721 资产(您只需要为每个资产分别设置 ID 和数量)。由于这些优点,最近 ERC1155 标准被越来越多地采用了。

剖析 ERC20、ERC721、ERC1155 标准。ERC20 将地址映射到金额,ERC721将唯一ID映射到所有者,而 ERC1155 有嵌套的映射,将 ID 映射到所有者和数量。

可组合物品

以 ERC-998 为主导的可组合物品提供模板, NFT 通过该模板可以拥有非同质、同质的资产。虽然在主网上只部署了很少的 NFT 组合,但我们认为有很多令人兴奋的机会可以使用它们!
加密猫可能会有抓挠柱和食盘,这道菜中可能会有一些同质化的“猪”代币。如果我卖了这个加密猫,我就把所有相关的资产都卖了。

非以太坊标准

尽管以太坊目前是大部分业务的所在地,其他业务链中也出现了其他几种 NFT 标准。DGoods 是神话游戏团队的先驱,它从 EOS开始致力于提供功能丰富的跨链标准。Cosmos 项目也在开发 NFT 模块,作为 Cosmos SDK 的一部分, NFT 模块是可用的。

非同质化代币元数据

如上文所述,该 ownerOf 方法提供了查找 NFT 所有者的方法。例如,通过在 CryptoKitties 智能合约中查询 ownerOf (1500718),我们可以看到,在编写 CryptoKitty#1500718 时, CryptoKitty 的所有者是帐户地址 0x6452。
可以通过访问他们的 CryptoKitty 验证文件来使用 OpenSea 或CryptoKitties.co

但是,OpenSea和CryptoKitties 如何确定#1500718 CryptoKitty 的外观呢?它的名称和独有的属性是什么?这就是元数据。
元数据提供特定令牌 ID的描述性信息。对于 CryptoKittty,元数据是猫的名称、猫的图片、描述和其他任何特征(CryptoKitties中的 cattributes)。对于门票之类的,除了名称和描述之外,元数据还可以包含该事件的日期和票据类型。上面这只猫的元数据看起来是这样的:

{
“name”: “Duke Khanplum”,
“image”: “https://storage.googleapis.com/ck-kitty-image/0x06012c8cf97bead5deae237070f9587f8e7a266d/1500718.png”,
“description”: “Heya. My name is Duke Khanplum, but I’ve always believed I’m King Henry VIII reincarnated.”
}
问题是如何以及在哪里存储这些数据,以便关注 NFT的应用程序能够访问它。

链上与链下

开发人员首先要决定是代表链上的元数据还是代表链外的元数据。也就是说,您是将元数据直接放置在代币的智能合约中,还是将其单独托管?

链上元数据

在链中表示元数据的好处是:

  1. 它与代币一起永久地存在,并且在任何给定应用程序的生命周期中保持不变;
  2. 它可以根据链中的逻辑进行更改。如果资产的持续价值远超其最初创造的价值,那么第一点就非常重要。比如,不管用来创造艺术的原始网站还在不在,数字艺术在整个时代都将继续存在下去。因此,让代币标识符的生命周期必须保留其元数据,这一点很重要。而且,链上的逻辑可能需要与元数据交互。例如,对于 CryptoKitty来说,它的“世代”影响了 CryptoKitty的繁殖速度,而且所有的繁殖发生在链上(高代猫的繁殖速度较慢)。因此,智能合约中的逻辑需要能够读取其内部状态中的元数据。

链下元数据

尽管有这些优点,但大多数项目都是以太坊区块链当前的存储限制为条件,对元数据进行脱链存储的。因此,ERC721标准包含一个称为方法 tokenURI 的方法,开发人员可以使用它告诉应用程序在哪里为给定的项目查找元数据。

function tokenURI(uint256 _tokenId) public view returns (string)
tokenURI 方法将返回一个公共的 URL。然后又返回一个 JSON数据字典,类似于上面的示例 CryptoKitty 字典。元数据应该与官方的 ERC721 的元数据标准保持一致,以便 OpenSea 等应用程序使用。在 OpenSea,我们想让开发人员建立丰富的元数据,这些数据可以在我们的市场上显示,因此我们增加了ERC721 元数据标准的扩展,使开发人员可以包括特性、动画和背景颜色。

链下存储解决方案

如果要脱离区块链存储元数据,则有两种选择:

集中式服务器

最简单的元数据存储方案是在一个像 AWS 这样的中央服务器或云存储解决方案上存储。当然,这样做也有一个缺点:

  1. 开发人员可以随意更改元数据
  2. 如果项目离线,那么元数据可能就不存在了。
    为解决问题2,目前有几个服务(包括 OpenSea )将元数据在其自己的服务器上缓存在,以确保即使原始托管解决方案失败,也能有效地向用户提供元数据。

IPFS

越来越多的开发人员,特别是数字艺术领域的开发人员,都在使用星际文件系统(IPFS)来将元数据离线存储起来。IPFS是一个点对点的文件存储系统,允许在计算机之间保存内容,因此文件可以复制到许多不同的位置。这确保了 A)元数据是不可变的,因为它是由文件的 hash唯一寻址的,而 B)只要有一个节点愿意托管数据,数据就会随着时间持续存在。现在,有了 Pinata 等服务,开发人员可以通过处理部署和管理 IPFS 节点的基础设施以及高期望值的 Filecoin 网络来简化这一过程(理论上),即在 IPFS 之上添加一层来激励节点托管文件。

1赞