作者: 冒志鸿(ArcBlock 首席架构师、首席执行官)

NFT 成为“新鲜事”经历了很长的过程

虽然 NFT(Non-Fungible Token,非同质化通证)最近才“火”起来,但 NFT 其实并不是新鲜的概念。早在“染色币”(Colored Coin)时代,类似 NFT 的早期使用和尝试已经开始,通过“染色币”技术,人们在比特币网络上发行新的资产,产生类似股权凭证等记录,也有极客在比特币数据里保存图片等信息,这些都可以视为“上古”时代的 NFT 雏形。

crypto kitties

早在 ArcBlock 项目刚刚成型的 2017 年,第一次真正把 NFT 带入大众视野的项目 CryptoKitties(加密猫)就造成了以太坊的严重拥堵,一方面人们惊讶于一个介于卡通收集和养成游戏之间简单的“加密游戏”会引发这么高的兴趣,另一方面人们更吃惊于立志成为“世界的计算机”的以太坊性能会如此不堪一击,一个简简单单的游戏就让其性能拖慢到几乎不可用状态。正是由于 CryptoKitties 对以太坊的冲击,2017 年底我们发布的 ArcBlock 白皮书就以 CryptoKitties 为例说明了当下区块链存在的普遍的问题并将此作为 ArcBlock 平台努力解决的问题之一。

cover

同样成立于 2017 年的 OpenSea 最近伴随着 NFT 的火热也变得非常热门,并成为迄今最大的 NFT 交易平台,但其实他们也已经在 NFT 交易领域默默耕耘了很久。我很喜欢 OpenSea 给自己起的这个名字,象征 NFT 展现了如同星辰大海一般无限可能性和无限包容性。

任何一种创新的技术从首次出现,到迭代升级,到开始让大众“吃惊”或者“眼前一亮”,往往都需要很多年的时间。如果从染色币时代计算,NFT 已经出现了 8 年了,即便从首次进入主流的 CryptoKitties 算,也已经是第 5 年了。NFT 是综合性的技术和产品,目前仍然处于探索创新的初期,未来会有日新月异的飞跃性发展。

NFT 与去中心化应用,以及时下流行的 Web3.0 生态有什么关系?

NFT 的应用场景远不止于数字艺术品和收藏品,实际上它有着无限的空间。

ticket

熟悉 ArcBlock 的朋友都知道,我们去年举行的开发者大会已经采用 NFT 作为大会门票,用 NFT 发放了各种参与活动纪念的徽章和黑客马拉松获奖证书。我们在 DevCon 2020 上也演示了用 NFT 来作为各种应用的可能性,包括用 NFT 来换取我们的签名版实体书《区块链实战:从技术创新到商业模式》。

devcon badge

除了实用性,我们的 NFT 徽章同时也是数字艺术家采用哈希计算方式生成的多层艺术作品,每一个人的纪念徽章都是独一无二的,而黑客马拉松的纪念徽章不但独一无二,而且可以多个可组合, 我们今年 6 月举行的 DevCon 2021 还会展现更多的 NFT 应用形态。

hackathon badge

其实 NFT 的应用场景远远不止于此。在 ArcBlock 的设计中,用户在服务上的账户和数据、对某个节点或软件的所有权、软件的版权和授权许可等等都是 NFT,我们的设计把去中心身份(Decentralized Identity,简称 DID)、可验证证书(Verifiable Credentials,简称 VC)和 NFT 结合起来,形成强大的应用能力,可以对现实世界中大量事物和应用流程建模,从而让区块链能够更好地应用解决更多实际问题。

我们一直认为区块链的大部分应用本质上都是 Token(NFT 和 FT,或者它们的组合)的应用, 离开了 Token 区块链将失去很大的意义。欣慰的是,最近“无币区块链”这一买椟还珠的概念几乎无人问津,Token 带来的应用繁荣时代即将来到。

在去中心化应用(Decentralized Applications,简称 DApps)和目前日渐流行的 Web 3.0 的概念中,去中心化身份、用户自主控制的数据以及去中心化的服务部署是实现去中心化愿景的关键技术,而 NFT 在这些技术细节的实现上是一种非常合适的机制。我们前不久发表的文章《NFT:数字所有权的伟大试验才刚刚开始》指出,NFT 让区块链来介入现实世界的确权和验证变得可行和标准化,感兴趣的读者可以从那里了解更多。

NFT 完全存在于区块链上吗 ?

很多人在接触使用 NFT 时可能没有意识到,今天的 NFT 虽然一部分数据在链上,但大部分实现的数据是在链下的。

目前的 NFT 其实大部分被设计为链上和链下两部分,链下的部分往往是 NFT 的数据,链上部分在以太坊上通常只被用于登记 NFT 的归属权。虽然一些早期如 CryptoPunk 的 NFT 尝试试图把数据全部放在区块链上,但是现在把数据放在链下而仅把有限的信息放在链上是目前通行的最佳实践。

有些 NFT 平台把数据保存在 IPFS 或者 Swarm 这样的分布式存储平台上(比如 CryptoKitties 从一开始就把数据放在 IPFS 上),有些干脆就是一个 Web 的链接,也就是传统的互联网数据存储方式,可能是用 AWS S3 这样的云服务,也有可能就是在某个 Web 服务器上(比如现在流行的 Nifty 的 NFT 内容就存放在他们自己的 Web 服务器上)。这样带来的一个风险就是,万一这些公司或者服务不存在了,即便链上的记录说明你拥有某个 NFT,这些 NFT 本身的数据也将丢失。这是 NFT 早期一种不完善的形态,已经有越来越多的人开始意识到这个问题。

juan

IPFS 创始人 Juan Benet 的推文“Not on IPFS, not your NFT”

作为先行者和探索者,ArcBlock 在 NFT 的技术演进上也是经历了一个过程。我们 NFT 的最早版本设计数据完全在链上,为此我们限制一个 NFT 数据不能超过 1M,这对证书、徽章等类型的应用绰绰有余,但对数字艺术品就必须能扩展到链下,因此在 2021 年新版资产链升级中我们对 NFT 的数据格式进行了扩展,通过扩展 W3C 规范中的 Service Endpoint(服务端点)的标准做法,使得我们的 NFT 可以由发行者进行最大自由度的控制,兼容全链上方式和链上链下协同方式。而 ArcBlock 对 DID 和 MyData 等用户自主身份、用户自主数据的支持,能让 NFT 的数据问题得以完善的解决。

NFT 可以“跨链”吗?

既然很多 NFT 数据部分在链下,那么要求 NFT 链上数据“跨链”存在是一个很现实的需求。

目前以太坊的 ERC721 和 ERC1155 协议和 ERC20 协议类似,仅仅定义了符合建议的规范接口。任何 NFT 只需要在以太坊上部署智能合约并提供符合 ERC721 或 1155 的接口,就被以太坊生态视为一种 NFT。一个在其他区块链上或者 Layer 2 系统上实现的 NFT 如果支持以太坊 ERC 721 或 ERC 1155 的接口,就可能可以直接加入现有基于以太坊的各种生态。目前出现各种 Layer 2 方案主要还只是考虑 Token 和转账的问题,我相信这将是 Layer2 发展的一个未来方向。

目前以太坊 ERC721 等 NFT 在智能合约里记录的完全是以太坊地址为单位的“归属权”,因此这对在采用不同地址体系的其他链之间来“跨链”记录 NFT 归属会产生困难。即便采用相同的地址体系,由于 NFT 的归属是记载在 ERC721 的智能合约内部数据结构的,因此当不同链上归属权不一致的时候将会产生归属权界定的困难。我认为要彻底解决 NFT 归属权的跨链,就必须采用 DID 和可验证证书或类似技术,也就是 NFT 的归属并不只是来自智能合约里的内部数据,而是来自可用密码学验证的证明,如此 NFT 的跨链存在才会真正得以实现。

ArcBlock 的 NFT 设计是原生“跨链”的。我们一直认为“链网”架构是未来区块链的形态,NFT 不但能在 ArcBlock 的 ABT 链网内的链之间自由流通,而且能作为以太坊的 Layer 2 而存在,采用 Optimistic Rollup 技术,用户可以把 ArcBlock 的 NFT 放回到以太坊上成为符合 ERC721 的资产,从而加入以太坊的生态。

NFT 和去中心化身份(DID)可验证证书(VC)有什么关系?

正如前文所述,采用 DID 和 VC 来确定 NFT 的归属权能让 NFT 跨链存在变得可行。在区块链里引入 DID 是 ArcBlock 的创新之一,把可验证证书和 NFT 结合也是我们在 NFT 领域深耕的创新之一。

目前以太坊生态的 NFT 虽然有 ERC 721 等协议和规范,但这些协议仅仅考虑了以太坊生态自己完全没有考虑其他环境,而且 ERC721 等协议仅仅定义了 NFT 的交易接口规范,却没有对 NFT 本身的数据格式做出约定,导致目前各种 NFT 格式基本是各个平台自己定义,大多数做法就是一个 JSON 格式的 Meta Data(元数据),再附加指向一些外部的媒体文件。这么做的一个最大问题是”链下“的 NFT 数据可以复制也无法验证。你花数万甚至数十万美元的代价获得的数字艺术作品,在链上指向的数据往往是任何人都可以精确复制下载,也无法验证真伪的数据,这和很多人以为的 NFT 不可复制、不可篡改、容易验证属性其实存在理想与现实之间的巨大鸿沟。

自 2019 年 ArcBlock 推出 DID 开始,我们就把 DID 和可验证证书和 NFT 结合在一起。首先我们把 NFT 的拥有对象定义为 DID,而非某个特定的区块链地址。在此基础上,我们把整个 NFT 设计为可验证证书,NFT 的可验证性包含了 NFT 的所有数据,包括其媒体文件等,真正实现了 NFT 的不可篡改、不可复制,以及可验证性。

NFT 和 FT 可以互相结合吗?

NFT 和 FT(Fungible Token,同质化通证)其实是两种相辅相成的 Token,两者之间不是非黑即白,而是可以互相兼容。

以太坊的智能合约设计,使得 NFT 和 FT 可以在实现上非常巧妙地结合和重组。从这个角度而言,早期的 Token 设计,甚至一些所谓”以太坊杀手“的区块链没有这样的灵活性。因为在以太坊里,智能合约和一个有私钥的普通账户并无区别,这就是说一个 ERC721 的智能合约本身就可以成为其他 Token(无论是 FT 还是 NFT)的持有者,而对持有的 Token 的控制逻辑又是这个智能合约本身来决定的。同理,一个 ERC20 的智能合约本身可以持有其他的 Token,因此通过 ERC20 就可以“分拆”自己持有的资产。著名的去中心化交易所 Uniswap V2 的设计里, LP Token(流动性提供者凭证)就是这样的一种符合 ERC 20 规范的 FT,每个交易对合约本身持有了用于交易的两种 Token,而投入这些 Token 的人则获得持有 LP Token,而最新的 Uniswap V3 改为采用 NFT 的方式来实现持有不同仓位的 LP Token。

NFT 和 FT 的组合可以带来非常多的应用形态,从含有面值的礼品卡、彩票、股权证明、期权、产权证书、收益权合约等等,都可以采用 NFT 和 FT 的组合来建模。ArcBlock 的 Token 设计上充分借鉴了过去系统的利弊,让用户不需要编写复杂的智能合约就能轻易铸造安全易用的 FT 和 NFT,并可任意地形成循环嵌套组合来描述非常复杂的业务需求。

NFT 和 DeFi 有什么关系?

如果说 DeFi(Decentralized Finance,去中心化金融)是“金钱积木”(Money Lego),那么 NFT 可以说将是“万物的积木”(Everything Lego),毫无疑问 NFT 可以和 DeFi 有机结合,形成非常多的创新性应用。

lego

利用前述 NFT 和 FT 可以合这样一个特性,就能采用计算机科学里一个常见而强大的“循环嵌套”的设计模式,把简单的部件优雅地组合成为非常复杂、功能强大的部件。例如,可以设计一种 NFT,可以包含其他的 Token (FT),这很容易形成如股权、期权等应用形态。 而(在法律许可范围内)NFT 又可以把其归属权通过 DAO(Decentralized Automonous Organization,去中心化自治组织)的方式切分成 FT 的方式,可以让一群人来按份共有一个物理上无法分割的资产所有权,比如分时度假的别墅的产权可以是一个 NFT,而这个 NFT 通过建立一个 DAO 的组织来采用 FT 的方式发行分时使用权甚至进行收益分配等。采用类似的方法可以无限地组合和分拆,而这将为 DeFi 带来比现在的“质押(staking)”、“收益播种(yield farming)”等有意义得多的创新。

Uniswap 的最新版本产品设计已经采用 NFT 来作为其 LP Token,而不是过去采用 ERC20 方式。过去以 ERC20 方式的设计让 SushiSwap 的“吸血鬼攻击”变得直接方便,而采用 NFT 方式可以有效防范此类问题发生。

NFT 和 DeFi 结合的应用,我们预期在这个领域会诞生大量的创新和耀眼的明星。需要说明的是,要让 NFT 能在 DeFi 领域获得发展,NFT 本身的数据必须具备可靠性、不可篡改和可验证性,这就是为什么我们认为与 DID/VC 的结合是 NFT 成为更严谨应用的必由之路。

ArcBlock 的 NFT 技术发展路线图

ArcBlock 成立之初,我们就意识到 NFT 是一种重要的 Token 形态。在 ArcBlock 的“可编程通证”体系中,我们从一开始就对 NFT 形态的 Token 作了非常清晰的定位和规划,NFT 相关的协议在 ArcBlock 的区块链上被称为 ABBA 协议(ArcBlock Blockchain Assets Protocol,即 ArcBlock 区块链资产协议)。 在我们撰写、分别由中信出版集团出版的《区块链实战:从技术创新到商业模式》和人民邮电出版社出版的《2020 区块链漫游指南》两本书中都可以找到我们对 NFT 的实践的详细介绍。

在 ArcBlock 的 NFT 实现中,我们引入了一些非常独特和创新的设计,包括:

  • NFT 完美结合 DID 和 VC: ArcBlock 的 NFT 结合了 DID 和 VC 技术,因此在链下数据可验证、不可篡改、数据可携带(Data Portability)、数据用户自主拥有(Self Sovereign Data)等方面有不可比拟的优势。我们认为这会是将来 NFT 的普遍方向,我们采用符合 W3C DID 规范的设计具有很好的前瞻性和标准兼容性。
  • 原生的 NFT 的铸造和交易能力: 由于 NFT 和 FT 的重要性,我们在 ArcBlock 的资产链设计中把 Token 的铸造、不同 Token 之间的原子性交换等都作为原生协议来支持,不同于其他基于智能合约的区块链如以太坊等需要通过部署智能合约的方式来支持。此外我们意识到 NFT 交易本身的重要性和通用性,我们把 NFT 的交易基础作为标准的 Blocklet Service(基石程序服务)来提供, 开发者可以立刻在自己的 Dapps 中铸造自己的 Token 并立刻实现基于链的去中心化交易,不需要自己开发,更不需要依赖第三方。
  • 原生 ABT“燃料”机制的开放经济协议: 在 ArcBlock 系统中,我们把 NFT 的铸造、存储等应用和系统其他部分如 ABT 节点、Blocklet(基石程序)等完全统一了起来。 事实上,用户通过 ABT 来运行的 ABT 节点、Blocklet,各种业务在底层实现上完全采用了 NFT 交易和确权机制。 只需要使用原生 ABT 为基础的简单而一致的经济协议,开发者就可以为用户实现全方位的服务, 并且 ABT 的经济协议还通过 NFT 来隔离了支付和底层的业务提供,意味着应用可以对最终用户使用任意 Token 的支付方式(如 BTC、ETH),甚至采用传统支付方式(如信用卡、Apple Pay 等)就能提供服务, 这对服务提供的简化、业务的”出圈“等非常有帮助。我们在这部分有非常多的创新,以后会专门介绍。
  • 完善的支持 NFT 的钱包生态: 没有完善的生态钱包技术支持将是 NFT 的一个致命缺陷,这点在目前的以太坊 NFT 生态里已经可以看到这个问题,其实以太坊的 ERC 721 的 NFT 应用,如 CryptoKitties、POAP 等都已经很早就推出,但是由于缺乏面向用户的钱包支持,导致最终用户难以感知,让 NFT “出圈”很难。ArcBlock 非常重视钱包生态,ABT Wallet 实现了从 iOS 到 Android,并实现了纯 Web 端应用,并且在不同版本之间完全兼容和采用标准的用户体验, 这对以后众多 NFT 的应用非常重要。
  • 完善的支持 NFT 的区块浏览器: 过去以太坊生态的 NFT 另一个问题是区块浏览器对 NFT 不够友好,用户不能从常用的区块浏览器上一眼看清 NFT 的交易信息,也无法通过区块浏览器来检查校验 NFT 的数据(因为目前很多这些设计的外部数据没有可验证性的支持)。ArcBlock 的区块浏览器支持完善的 NFT 数据展示,并能完善帮助用户校验链下数据的一致性。ArcBlock 的区块浏览器是完全开源实现的 Blocklet,意味着不但可以使用官方部署的,任何人可以轻松部署区块浏览器实现更去中心化的校验。
  • 作为以太坊 Layer 2 接入以太坊生态: ArcBlock 的 NFT 自成体系,但是用户可以通过 rollup 技术把 ArcBlock 系统上的 FT/NFT 在以太坊生态映射为符合 ERC20 和 ERC721 的 Token,从而融入以太坊生态。

ArcBlock 设计的 NFT 体系具备上述许多与众不同的特点,由于我们研发时间久、投入大,我们很多设计已经在实际应用中进行了多次迭代改进,在 NFT 真正走向更广泛的应用时能获得更大的先发优势。