寻找信任之泉:读懂预言机原理、类型、现状和发展方向
本文于19年10月9日发布在链闻,内容讨论: 吴为龙(Genaro CTO)、李画,内容整理:李画
就像任何计算机系统一样,区块链的工作也是处理数据。
数据来源有两种,一种本身就在区块链上,比如一个帐户中 ETH 的数量;一种本身没在区块链上,比如 ETH 的价格。区块链系统如何获得自身之外的数据?可以通过预言机(Oracle):当合约需要某个链外的数据时,它去找预言机要,预言机就去链下获得这个数据,然后把数据告诉给该合约。
这样看来,预言机非常重要,如果没有它,区块链的发展就局限在只能使用链上的那一点点资产数据的范围内,这显然不符合我们对它的期待。但是,重要的东西并不一定是影响系统发展的关键东西,比如氧气对于人类而言也许是最重要的,但它几乎不会构成困扰我们的问题。
不妨用互联网与区块链做对比。显而易见,互联网的数据来源也几乎只有「网外」(对应链外),它同样有数据的「上网」(对应上链)问题,但它为什么没有遇到预言机问题?
原因并不在于互联网上的应用可以从网外读取数据,而区块链上的应用出于共识需求,必须通过预言机来读入一个一致的链外数据——实际上,任何链上的应用都可以轻松地给自己写一个预言机作为链外数据的接口。关键的问题在于,用户是否相信这个预言机提供的数据。
究其根源,原因在于传统互联网是中心化结构的,在这种系统中,用户选择该中心化机构,就得相信这个机构提供的数据,对数据的信任问题转移为对中心的信任问题,数据的「上网」是由中心化的服务器自己来完成的。当然,用户也可以选择不信任。
而区块链是分布式结构的,我们希望打造的是一个 trustless (无需信任)的系统,信任是建立在透明的机制以及对该机制开源的代码实现之上。这样一来,中心化的机构就无法利用用户对信任的需求建立起垄断的高墙,然后在高墙内「为所欲为」。
在预言机问题上的体现就是:用预言机上链数据并不难,简单的读写操作就能把一个链下的数据「喂」给链上的合约;但生产信任却很难,预言机要通过技术和机制的设计,使得自己提供的数据能够满足用户对信任的需求。
所以,从功能上看,预言机解决的是数据问题,但从本质上看,预言机需要解决的是信任问题。这正是互联网没有「数据上网」问题,而区块链却有「数据上链」问题的原因。
当区块链发展到需要使用链下数据来探索和实现更多方向上的应用时,预言机要能够满足其对「可信数据」的要求。因此,在对「区块链基础设施」这一主题的探讨中,我们选择了预言机作为其中之一。
一、预言机的设计思路
当我们知道预言机的核心在于解决信任问题后,就能明白各种预言机在设计思路上的主要差别,在于它们的「信任生产机制」的不同。
根据信任的不同来源,可以把如今的主流预言机分为如下三类:
- 由可信的中心提供数据,比如 Provable (原 Oraclize)。
- 由分布式的节点提供数据,比如 Chainlink 。
- 由可信的联盟提供数据,比如 Maker 的预言机。
在介绍不同类型预言机的具体实现之前,以下几点是需要注意的,或者说是值得我们思考和讨论的:
- 预言机的作用不是提供「真实的数据」,而是提供「可信的数据」。「真实」是一个主观的概念,也是一个难以评估的概念,世界上或许没有任何工具能保证输出「真实」,而让预言机去完成这样的功能也并不现实。我们无法设计一套机制来确保真实,但可以设计机制来提高可信程度。如果要求预言机提供真实,就容易陷入预言机无用论与区块链无用论之中,因为它们确实无法满足我们对真实的要求。
- 不同的应用场景对信任的需求是不一样的。并不是所有的数据都要在最高程度的可信保障下上链,这涉及到信任的成本问题,也与数据可信的重要性、数据造假的动机等等维度相关。
- 不同的应用场景,信任的来源 / 支撑是不一样的。也就是说,并不能认为某种信任生产机制实现的信任就是最优的,而某些机制实现的信任就是不好的。
这样一来,当我们去观察预言机项目时,重要的关注点可以落在它是如何生产信任的,以及它提供的信任能否满足它所服务的应用场景的需求。
预言机的设计还涉及到另一个重要问题就是数据源的问题,即预言机中的数据提供者从哪儿获取数据。可以分为两种类型,一种是从单一数据源获取数据,一种是从多个数据源获取数据。
二、预言机的具体实现
让我们从信任的来源入手,了解一下不同类型预言机的具体实现。
预言机是区块链重要的基础设施,但预言机并不是一项「神奇」技术,它所作的其实就是把链外的数据给到链上的应用,无论预言机是什么样的,都只是数据提供方的不同实现形式。
我们可以想象一个小镇,镇子里有一口大钟显示时间(数据源),还住着一位盲人(区块链应用)。盲人想知道时间,但他无法看见大钟,所以得有一个人把表盘显示出的时间告诉他,这个人就是预言机。
1. 由可信的中心提供数据
如果小镇中住着 10 位盲人,而时间对于这些盲人又很重要的话,预言机就可以成为一门生意。盲人每次找这个人询问时间都得给他 1 块钱,10 位盲人,每位盲人每天问他 10 次,那他每天就可以赚 100 块。
这个人如果是自己去看大钟的时间然后告诉盲人,我们称这种方式为由可信的中心提供数据。在这种情况下,盲人们选择这个人的前提是要能够相信这个人不会欺骗他们,所以这个人需要证明自己是值得信任的。
一类中心化预言机的信任保障是「真实性证明技术」,比如 Provable。它采用的是 TLSNotary 算法,对每一个返回的结果都可以提供一个未被修改的证明,也就是说它能表明提供给合约的数据是数据源在某个时间点上的正确数据。
Town Crier 也属于这种类型的预言机,它使用的是英特尔 SGX (软件防护扩展)架构,通过在类似黑匣子的环境中运行代码来防止数据被篡改,是一种基于硬件的信任提供方式。
这类预言机有它们自己的弱点,包括技术问题,比如 TLSNotary 算法自身的不足;单点故障问题;数据源风险问题等等,但它们也有着低成本、高效率等等优点,而且真实性证明技术也是在不断发展中的。
虽然是中心化的存在,但由于这类预言机是商业化的,它们做而且只做提供数据的工作,数据的安全性与其自身的发展是直接相关的,所以它们不作为和作恶动机是比较小的。
除了通过技术提供信任的预言机,还有另一类可信中心的预言机:试想,如果镇子里的大钟添加了报时功能会怎样?盲人走到大钟旁,按下一个按钮,大钟直接告诉他现在的时间。
当区块链需要某个权威机构(比如国家机构、银行等等)的某类数据时,由该机构自己构建预言机来提供数据也许是很好的方式。这个时候重要的不是预言机的技术,而是数据源本身是否愿意开放接口。信任的来源也不是预言机的设计,而是该机构本身。
这是一种把链下的信任继承到链上的方式,它相信的是由传统的信任生产机制带来的信任。虽然高度中心化,但至少在相当长的历史时期内是有积极且重要的意义的,比如在借贷、商业借贷的场景中。记住,区块链并不是要否定其他一切产生信任的方式。
以国家机构为例,可以很容易理解这一类预言机的特点,但该类别也可能出现商业类型的数据源及预言机,它们服务于某种特定的数据需求,这种数据往往是大量特殊数据的计算结果,而只有专业的机构才有能力给出这种数据结果。
2. 由分布式的节点提供数据
预言机要解决的是信任问题,由可信中心提供数据的预言机通过技术证明 / 保障自己的可信,而由分布式节点提供数据的预言机则是通过机制的设计,来保障自己的可信。后者也常常被称为去中心化预言机、去中心化预言机网络。
让我们回到小镇。去中心化预言机网络是指镇上所有的人都可以参与报时,当盲人询问时间时,这些参与者 / 节点把自己看到的时间告诉给一个统计员,统计员再把最多人给他的那个时间告诉给盲人。
不难发现,这种预言机的设计思路与区块链的分布式思想是一致的,因此它不会给区块链上的应用添加新的信任类型;而不添加新的信任类型,事情的复杂度就不会变高。但这种方法也有局限性,比如它是相对昂贵的,因为要给众多的参与者付钱;它是需要网络规模的,参与者的数量和质量与数据的可信程度是相关的。
Chainlink 是这一类型的预言机。如下图所示,分布式的预言机节点 / 预言机服务提供商从分散的数据源获取数据,并将数据提交给 Chainlink 的链上聚合合约(中长期战略中将改为链下聚合以节约 gas 费成本),该合约经由算法计算出数据结果,并将结果发送给提出数据需求的区块链应用。
在 Chainlink 中,预言机服务的购买者先指定自己的服务级别,再由 Chainlink 为其匹配预言机节点,包括节点的质量和数量。
比如,购买者的合约是一个 10 万美元的 DeFi 市场,那么可能需要选择 5 个预言机节点来组成网络;如果该合约增长为一个 100 万美元的市场,可能就需要选择 15 个预言机节点。可以认为,Chainlink 的工作方式是根据用户需求为其提供一个定制的动态的预言机网络。
除了上述专门的预言机项目外,预测市场,比如 Augur ,也可以作为一种类别的去中心化预言机,因为可以把它的预测结果作为区块链合约的输入数据。每一个预测的参与者都是一个预言机节点,这些参与者同时也是数据源本身。
预测市场提供的预言机功能可能是其他类别的预言机无法取代的,因为其数据源的独特性,比如不依赖于任何中心化的信任,比如可以提供表达情绪和知识的数据等等,预测市场在未来也许有其独特的预言机应用场景。但它的弱点也是突出的,它对组成预言机网络的节点数量有较高的依赖,它在提供数据的效率上是较低的。
3. 由可信的联盟提供数据
如果某个应用或某类应用对链外数据有高频的、高质量的需求,而市场上的预言机无法满足需求时,比如安全性不够高、性价比不够好,这些应用可能需要一个专门为自己的特殊需求服务的预言机,而由可信联盟提供数据的方式是一种适合该场景的设计思路。
「由可信的联盟提供数据」是「由分布式的节点提供数据」的一种特殊形态,其特别之处在于,组成预言机网络的节点是指定的。Maker 的 V2 版预言机或许可以划归为这一类型,其节点除了匿名的个人喂价方,还可能包括 0x 、 dYdX 、 Set Protocol 、 Gnosis 等指定的喂价机构 。
相比之前的两类预言机,这类预言机的信任组成是相对复杂的,包括对系统的机制设计的信任;对节点的信任,这很大程度上源于节点本身的利益相关者身份以及节点本身的机构声誉;对选择节点的 Maker 和 Maker 本身机制的信任。
对联盟(节点和节点选择机制)的信任带有中心化的色彩,但恰恰是这种中心化在特定的场景中能够产生「高性价比」的信任,因此在实际应用中,这类预言机可能是一种实用的数据上链方式,特别是在区块链行业发展初期、商业化预言机还不够成熟的情况下。
Maker 的预言机是由 Maker 主导的,但因为能满足 DeFi 领域对可信数据的需求,一些其他的合约也在使用该预言机。我们也可以设想一个由第三方提供的可信联盟的预言机服务,它是 DeFi 领域中受信任的机构 / 节点组成的预言机网络,为分布式金融提供专业的数据服务。如果区块链产生下一类新的应用场景,那么有可能也需要诞生一个由那个领域的可信节点组成的联盟式的预言机服务。
三、发展之路
区块链愈发展,对链下数据的需求就会愈强烈,预言机的重要性也会愈发凸显。但就像上文讨论的一样,预言机领域一个更大的可能是出现多种形态并存的市场。我们可以认为从中心式到联盟式再到分布式,是数据提供方的颗粒度的由大到小,而不同的颗粒度决定了它们不同的属性,也就决定了它们各自适合的服务场景。
虽然预言机也可以是由分布式的节点网络组成,但我们看待区块链和预言机的视角及评价它们的标准是不一样的:区块链做的是探索性的工作,它更多的是问「这个问题是否适合我来解决」;而预言机做的是功能性的工作,它更多的是问「我怎么去解决这个问题」。
所以,预言机的设计追求的是可用性与实用性:它只为需求服务,不为愿景服务。最容易理解的一点就是:它要追求性价比。
除了要通过技术和机制解决信任问题外,预言机的设计还包括许多其他方面,比如数据的隐私问题、防黑客攻击的能力问题等等,因为这些都会关系到预言机的可用性。正因如此,预言机的设计是一个涉及到诸多领域的综合性的工程。
在文章的最后,必须指出,预言机是区块链重要的基础设施,但这并不代表着预言机的发展会制约区块链的发展,反而,也许区块链的发展状况对预言机的发展影响更大。只有当链上合约对链下数据有广泛的、迫切的需求,并能为数据付费的时候,预言机才有可能真正的、全面的发展起来。