在将智能合约带入到这个世界上之后,这个世界也需要被带入到智能合约中。
预言机将会把智能合约带入到新的发展阶段 — Original Photo by Donald Giannatti
分布式账本和智能合约将通过进一步消除人类生活中的嫌隙而带来前所未有的创新,但在这些智能合约可以无需信任地接受链外输入之前,创新将会受到限制。去中心化预言机是智能合约与外界互动的门户,同时避免对单一事实来源的依赖,这将带来另一波激动人心的创新。
本文将对一下内容做详细介绍:
为什么预言机服务是去中心化技术栈中的核心服务,
对无信任服务的需求,
预言机会遇到的各种挑战和攻击方式,
8个致力于这方面研究的工程介绍。
I. 为什么我们需要预言机
公共区块链项目(例如Ethereum, Dfinity)上的智能合约在对抗环境中执行,其中仅通过传播确定性事务(即可由所有节点验证的事务)来保证安全性。智能合约被设计为接收输入→执行业务逻辑→更新区块链相应的状态,这个过程是不可逆的;区块链世界中没有Ctrl+Z。
允许智能合约接受来自区块链外部的输入是一把双刃剑;通过允许与外部世界进行交互,会极大地增加应用案例数量,同时也会引入信任问题。公链上的矿工无法确定性地验证所有外部输入,因此将执行与智能合约的预定义标准相匹配的任何内容。
让我们来看一个简单的例子:假设有这样一个智能合约,Alice和Bob打赌,猜伦敦时间2019.1.3下午两点的比特币价格。Alice和Bob都向智能合约抵押了1ETH;如果届时比特币价格高于4,200美元,Alice将会得到2ETH,否则,Bob将会得到2ETH。智能合约对于比特币的价格没有概念,所以我们必须找到一个方法来向合约报告正确的价格,特别是一旦这个赌约的结果确定了,就无法更改了。为了达到这个目的,我们需要预言机。
预言机是一个声明真实世界状态的实体。比如,一个预言机可以报告2019.1.3日Coinbase上BTC/USD价格,或者2019年欧洲冠军联赛的获胜者。这些信息将通过一个或多个预言机哪里来获取或聚合,这些预言机从一个或多个可信的数据源获取具体数据。
在深入探讨无信任的预言机的各种技术挑战之前,我们想提出我们预见的5个基于预言机的智能合约关键应用案例。
金融产品
智能合约非常适合许多金融产品:利率掉期交易,期权现金结算,去中心化杠杆交易。所有这些都需要无信任的数据来源,以确保正确的链上执行结果。
现在已经可以利用的金融产品预言机的项目示例:CDx,dYdX,MakerDAO,Vega Protocol,0x protocol。
保险智能合约
凭借无信任和可靠的事实来源,一些保险产品可以通过智能合约以编程方式购买和结算。保险公司最大的损失是骗保,所以,预言机在此时也是非常关键的。智能保险的几个例子包括:
· 通过Etherisc和Fizzy在航班延误时自动支付。
· 鼓励本地的预言机在本地验证声明,并在与Nexus Mutual一起发布索赔之前向区块链报告。
· 人工智能与地理数据相结合,用于FlyingCarpet的创新和程序化保险。
运输
GPS并不总是适合需要可靠位置来自动完成付款的dApp,因为它可以通过伪造造成中心化的单点故障。以FOAM为例,它可以降低中心化的位置服务信任标准,并依靠去中心化的网络来保证声称的位置,此处需要地理预言机来充当该角色。
抵押借款和稳定币
需要获得关于抵押品价值的可靠数据,以决定何时清算资产,或在它离开预期价值太远何时重新确定稳定币的价值。例如,Maker DAO公司的DAI是一种基于以太币的稳定币(很快会基于多资产),他拥有多个预言机来报告以太币价格,以便能知道合适贷款抵押不足,需要因此进行清算以保护系统。这些预言机由Maker代币持有者选择和得到补偿。
这也可以应用到与Ethlend或Dharma等无信任的p2p借贷平台。
预测市场:
利用人们的已有知识,去中心化预测市场(Augur, Gnosis)会将人类的协作推向前所未有的高度。这些市场需要依靠一个或多个预言机来进行链下事件结算。
II. 确保预言机诚实可信
区块链被设计为与外部世界和可信第三方分离。但是,大部分的事件仍然发生在区块链外部,所以我们需要(在区块链和外部世界之间)建立一个桥梁,但又不能在抗审查方面有所妥协。事实上,dApp的可信程度取决于它最薄弱的环节,所以单一的信息来源是不够可靠的。使用多个事实来源会更安全,但同时也会带来更高的成本。目前没有一个通用的解决方案,我们可以期望应用程序采用基于自身风险判断的方法来确定需要少从多少个来源处为应用程序获取信息。
比如,如果智能手机应用可以容忍较粗的精度的话,伦敦的气温可以通过一个单一的预言机(比如API)来转发得到,但是如果温度报告是用来结算一笔1千万美元的保险合同的话,我们使用多个(很多!)预言机:卫星数据、本地传感器数据等等。
因此,预言机可能会提供一系列解决方案,根据所涉及的在成本和去中心化之间权衡取决于所涉及的价值。
瑞士奶酪模型
第三方机构很难保证永远值得信任。为了在中心化的世界中解决这个问题,我们使用多层级的保护:合同、责任公司、保险、法律……只要其中一个层级按照预想的起作用,正确性就可以得到保障。然而,如果所有层级都出现了问题,攻击就会成功(瑞士奶酪模型)。
一个过分依赖中心化预言机的例子是LIBOR丑闻。伦敦银行同业拆借利率(London Interbank Offered Rate, LIBOR)是一种银行间利率,通常用于计算专业和个人抵押贷款利率,以及其他金融产品,这些利润总共支撑了300万亿美元的贷款。据说,从2005年或2003年开始,交换交易商多年来相互勾结,操纵这一利率。伦敦银行同业拆借利率也被用作衡量银行健康状况的指标,而导致2007–2008年金融危机期间的利率被操纵,使得一些金融机构看起来比实际情况更健壮……
这里的结论再次证明,单个(未经审计的)事实来源是一个薄弱环节,会损害依赖它的整个系统。
虽然万无一失的系统,但我们可以将多层保护概念同样地应用于去中心化预言机,作为最少信任机制。
A.多数据源
降低错误数据报告的可能性的最简单的方法是让预言机聚合多个数据源。在这种情况下,只有两种方式会收到错误数据:大多数数据源出现故障,或者是预言机自身出现故障(单点故障)。
B.多预言机
通过增加预言机的数量,它们在概率上不太可能全部都是恶意的,因此只要大多数人是诚实的,系统就是安全的。但是,所有预言机都存在有意或无意地传递错误信息的风险(如果来源本身就已经被破坏了)。
C.利益攸关【译注】
去中心化网络可以加入某些激励机制,以确保其参与者的行为符合网络的利益,并因此而得到补偿。这就是为什么矿工获得大量奖励的原因,也是为什么股权证明(PoS)需要削减条件以对抗女巫(Sybil)攻击和无抵押(nothing-at-stake)攻击的原因。
让去中心化的匿名身份扮演预言机的角色是非常危险的,特别是当他们的不良行为会带来财产损失但却无法合法索回的时候。通过在项目中使用代币,去中心化的预言机网络可以强制节点以网络的原生货币存入资金/存款,以便有机会为网络执行工作。如果他们表现良好,他们会为自己的工作获得回报。如果他们行为不端,他们就会失去一定比例的股份。这确保了预言机有正确的激励来传播准确的数据。
【译注】原文为 Skin-in-the-Game
D.可信执行环境(Trusted execution environment)TEEs
英特尔最近推出的Software Guard eXtensions(SGX)或ARM的TrustZone就是TEE的典范。这种机制的原理是类似的,我们将以英特尔的解决方案为例。
简单来说,SGX允许应用程序在称为安全区的环境中执行,该环境为用户级代码提供硬件保护。首先,安全区保护应用程序(数据,代码和控制流)的完整性,以防止其他进程的破坏。其次,安全区保护应用程序的机密性,这意味着其数据,代码和执行状态在理论上对操作系统的其它部分是不透明的。然而,它可以在安全区外读取和写入存储器。SGX旨在保护应用程序,即使是程序运行在怀有恶意操作系统或是节点管理员的情况下。
在安全区运行预言机并分发证明可以提供一个强有力的保证,保证预言机正在执行特定应用程序,因为SGX系统是否正在运行可以被远程证明。
值得一提的是,在英特尔SGX中连续发现了两个漏洞(2018年3月和2018年7月),还有更多漏洞被发现。虽然第一个漏洞已经修复,但这凸显了单独使用TEE会出现单点故障的情形,并且当智能合约从一个或多个预言机产生输入并自主执行时,针对单点故障的多个保护层是至关重要的。
这些防护屏障在单独使用时是不起作用的,但它们在组合时显然会更有效。在下一节中,我们将介绍去中心化预言机的主要攻击方式,接下来将是利用这些实际项目的示例。
责任编辑;zl
评论
查看更多