1 为什么需要预言机


自从Nick Szabo于1995年首次提出智能合约的概念以来,越来越多的线上交易合约均采用智能合约的模式,尤其是以ETH为代表的公有链平台,其主要原因在于人们希望通过比传统合约更安全并且成本更低的方式实现在计算机网络上的交易。



以太坊是一个任何人都可以创建和运行去中心化平台的区块链平台。以太坊提供以太坊虚拟机编译并执行智能合约字节码。智能合约是以太坊区块链上指定地址的代码和数据集合,智能合约间能够相互发送信息,同时也能执行图灵完备计算。智能合约建立在以太坊虚拟机字节码基础之上。



智能合约在以太坊虚拟机中运行,并且是一个沙盒运行环境,与外界隔离。智能合约在虚拟机中运行时,不能进行网络操作、文件I/O或执行其他进程的。智能合约之间也只能进行有限的调用,这样保证了合约运行的独立性,并且提高了运行时的安全性。



智能合约允许在没有第三方的情况下进行可信交易,实现交易的可追踪且不可逆转,但是无法与区块链外的数据发生直接联系(如外部数据的获取与调用等),因此需要一个外部的图灵机将数据写入区块链或分布式账本中,预言机在其中扮演着数据来源API接口之间桥梁的角色,从而实现区块链接口与外部数据API接口形成对接。


2 预言机


预言机本质上是一种数据调用和访问的中间件,它分别解决了“是或否”的决策性问题和“数据是多少”的功能性两类问题,从而实现了智能合约对外部数据的访问和调用。它既可以从原生的链上获取数据,也可以通过爬虫或者可信第三方机构从链下获取数据。



预言机和智能合约天然的契合点在于,智能合约本质上是控制类的脚本代码,而预言机本质上回答决策性问题和功能性问题,二者只是实现数据的调用而非计算。
安全性方面,智能合约不具备大型数据处理的能力,而且容易造成计算溢出,因此需要添加预言机对外部数据的调用而非计算,从而规避了智能合约在调用智能合约时陷入图灵停机的困境;可扩展性方面,预言机用于解决“智能合约在指定数据来源的情况下,上传数据有可能会被篡改”的问题,从而弥补智能合约平台缺乏网络效应和可扩展性的不足



预言机应用在智能合约的调用有利于实现数据资产化与价值化,并扩大智能合约的可移植性


预言机需要满足的5个条件


理想的预言机网络应当满足五个条件:数据调用是基于双方相互信任且不可篡改的、数据调用的高效性、数据调用的安全性、预言机网络设计符合激励相容原则、数据资产化。



1.数据调用是基于双方相互信任的(不可篡改)。预言机在调用外部数据引入智能合约时,应当保证最终反馈给用户的数据与数据来源本身的数据一致,防止预言者中途篡改。经过服务请求方的确认和其他预言者的验证后,如果调用数据结果无误,则将调用数据写入智能合约,并将交易记录上传到区块链上;如果调用数据出现不一致,则该交易将被定义为非法交易。



2.数据调用具有高效性。预言机合约通过智能合约规定,如果预言者没有在请求发出后的规定时间内响应用户请求,或者是响应请求没在规定时间内将数据反馈给用户,就会自动取消交易,并且对服务供应商实施惩罚。



3.数据调用安全性高。预言机的设计必须有效遏制各种数据腐败行为,比如女巫攻击、镜像攻击、复制答案(吃空饷)等。
并且,通过强制节点在TEE(Trusted Execution Environment)环境中执行解密,并向区块链汇报所有用户和节点都能看到的通用答案。



4.符合激励相容原则。预言机激励机制和监督机制的设立必须实现激励相容,但是无论是PoW(Proof-of-Work)还是PoS(Proof-of-Stake)都很容易造成多数人攻击,前者体现在挖矿方面——通过矿池等组织形式发起攻击,后者则是通过超额抵押(Staking)和贿选等方式实现攻击。
因此,治理机制的设计必须充分调动其他竞争预言机的监督积极性,并且不能够将代币奖励和打包概率等决定预言者收益的指标相挂钩。否则,将不可避免的发生预言者和用户因利益不一致而产生的委托代理风险。



5.数据资产化。数据应当作为一种资产,根据其资源的重要性和稀缺性进行定价,以公允价值的形式写入智能合约。目前,数据资产缺乏有效的定价机制,因为数据的种类千奇百怪,不同类型的数据对不同用户的作用也是存在显著差异,而目前数据定价权归数据的资源方主导,并没有实现去中心化。


预言机数据访问


预言机既可以从链上获取原生数据,也可以通过网络爬虫或者传统第三方机构获取数据。
对于预言机从链上获取数据,由于链上应用(Dapp)落地不及预期,导致用户对链上数据的需求有限,不足以支撑该模式的长期发展。
如果预言机从链下获取数据,它既可以是授信传统第三方机构作为公链或者联盟链的节点给链上输出数据,也可以是预言者通过网络爬虫的方式抓取特定数据。
一般来说,对于数据调用要求低时延的服务请求(如ETH价格实时调用),不适合采用通过爬虫的方式获取数据,因为爬虫的代码和数据的准确性受到网页结构和网络环境的制约;
目前主流的预言机项目(如Chainlink等)都采取授信第三方可信机构(如Google、甲骨文等)作为节点,从而完善相关DeFi产品的喂价机制。
区块链预言机_智能合约


预言机分类


预言机可以分为中心化预言机和去中心化预言机。二者的架构自下而上都可以分为网络层、操作层、合约层和应用层,但是在操作层和合约层上存在较大差异。



中心化预言机在性价比和用户体验上具有先发优势,而去中心化预言机因在客情和生态的模式上占优而具有较大的后发优势。Oraclize和Chainlink分别针对中心化预言机和去中心化预言机的优势和局限性做出了适当的完善。


中心化预言机


中心化预言机例如Oraclize由单一预言者(Oracle)为服务请求方提供数据,对某一特定的数据服务请求,在请求方指定n个数据来源并向中心化预言者发送合约请求后,服务商从1个或多个数据来源的接口调用数据,最终反馈给请求方的数据可以是1个数据来源的,也可以是从多个数据来源的结果进行汇总。
区块链预言机_智能合约_02
其中S1、S2至Sn表示数据来源,n>=1,且其中单向箭头均可以双向访问



一般来说,由于单一数据来源的成本远低于从多个数据来源汇总的成本,中心化预言机仅有从最可信的一个数据源调用数据,以实现整个预言机系统的高效运行。


去中心化预言机


去中心化预言机例如Chainlink由多个预言者共同提供数据获取服务,利用纠删码(Erasure encoding)技术实现答案冗余,增强整个预言机系统的容错能力。
区块链预言机_区块链_03
其中O1、O2至Om表示预言机,S1、S2至Sn表示数据来源,n>=1,且其中单向箭头均可以双向访问



当所有的预言者的规定时间内提交的答案汇总(汇总的方法包括加权平均、中位数或众数的方法,按具体调用的数据而定)后,将汇总后的答案反馈给请求方。


预言机技术架构


中心化预言机和去中心化预言机两类除了底层的网络协议(TCP/IP协议)、加密基础设施和硬件执行环境(一般为TEEs)相似以外,二者在技术架构上有着显著差异。
其中标志性的差异是:中心化预言机需要可信第三方作为验证人或者审查机构自证清白,而去中心化预言机通过多个预言者(Oracles)之间进行相互验证


中心化预言机技术架构


中心化预言机由可信中心提供数据通过第三方企业,提供智能合约运行所需要的外部数据,并将数据传输至智能合约中。技术架构自下而上依次为网络协议(一般为TCP/IP)、操作层、合约层和应用层。
区块链预言机_获取数据_04



网络层:最底层为网络协议,中心化预言机的网络拓扑结构中,由单一或寡头的中心化服务商控制一个或多个中介节点,其网络传播速度完全取决于中介节点对服务请求的反应,面临着一定程度上的单点故障风险。



操作层:操作层包括可信第三方验证系统、可信执行环境(TEEs)和格式配置器。可信第三方验证的渠道必须是让用户可信的。一般来说,中心化预言机网络的审查人最好是由国家权威部门、大型企业(如Facebook、Amazon等)担任,并且审查人和项目方无利益关系。
硬件方面,智能合约的运行和数据调用均在可信执行环境(TEEs)上进行。TEEs基于可信硬件(即与系统其他部分隔离开的硬件),拥有独立处理器和内存,其运行完全独立于操作系统、虚拟机监视器(Virtual Machine Monitor, VMM)、Bios以及普通计算机的其他核心部件。
TEEs分别在安全性和保密性方面发挥着重要作用。安全性方面,TEEs建立多个安全层,将可信硬件与计算机最脆弱的部分完全隔离,从而大幅缩小了黑客可攻击的范围。保密性方面,TEEs让节点无法查看运算数据,数据在链下进行传输和计算。
格式配置器一般是将最终传输给服务请求方的数据进行格式统一,为了增强数据的可读性的同时,使服务合约的执行便于验证,一般采用JSON格式。



合约层:中心化预言机包括订单匹配合约、服务请求合约、数据调用接口和服务标准协议。
用户(服务请求方)通过调用服务请求合约提出获取特定数据内容的请求,并规定服务标准协议(如规定服务响应时间、获取什么内容的数据等),中心化服务商在接受该请求后,调用订单匹配合约生成服务订单,最后通过访问数据源的接口(数据调用接口)获取数据。


去中心化预言机技术架构


去中心化预言机系统架构自下而上同样可分为网络协议、操作层、合约层和应用层。
去中心化预言机系统虽然在网络协议和应用客户端上与中心化预言机系统无显著差异,但是因其P2P(Peer-to-Peer)的网络结构使其在操作层和合约层上与中心化预言机系统存在显著差异。
区块链预言机_智能合约_05



操作层:操作层方面,去中心化预言机在中心化预言机的基础上,新增了多重签名机制和外部适配器。
去中心化预言机无需可信第三方机构的背书来自证清白,但是需要依赖多重签名机制让满足超过最小诚实节点数的预言者(Oracles)同时为相应节点签名。
如Chainlink采用门限(Schnorr)签名技术,让其他节点来检查提供服务的预言者是否具有不当行为且交易是否合理,必须最少一半以上的可用节点在链下实施签名才能够实施交易。
更重要的是,外部API适配器的设置使预言机可以将复杂的数据调用需求拆分成多个子任务,将多个预言者以分工协作的方式参与到服务过程中。
外部适配器是一种分布式的体系,提出需要多步骤复杂请求的节点越多会让更多的预言者参与到其中,从而让服务请求的人越多,得到的反馈速度越快,从而让完成服务的时间越短。



合约层:去中心化预言机系统在中心化预言机系统的基础上新增了信誉合约和汇总合约。
信誉合约方面,因为去中心化预言机系统本质上是由多个预言者(Oracles)组成的服务网络,所以需要通过调用信誉合约来统计每个预言者的历史服务情况,对存在不当行为(如搭便车复制其他预言者提供答案的哈希值、镜像攻击、女巫攻击等)的预言者扣减信誉评分和已质押。
汇总合约方面,由于去中心化预言机是一个存在多个预言者的数据服务网络,因此,在大多数情况下存在多个预言者在规定时间内同时对同一种服务请求进行响应。
此时,预言机网络通过调用汇总合约,采取加权平均或中位数等方式对所有预言者提供的答案进行汇总。


项目对比

区块链预言机_区块链_06

可扩展性分析


中心化预言机的商业模式本质上是一个数据服务平台,而去中心化预言机是一个多元的数据服务网络,更加有利于扩大全网规模。虽然二者将数据服务网络扩大取决于项目方本身的资源,但是去中心化预言机网络在不仅仅有效利用了项目方本身的资源,更有效整合了其加盟的多个预言者的资源,有利于整合多方的资源共同扩大预言机网络,从而形成有效的商业闭环


安全性分析


中心化预言机的安全隐患源于第三方的信任成本和黑客攻击,去中心化预言机的安全隐患源于因数据腐败导致整个网络失灵。
对于中心化预言机,其安全性取决于可信第三方的身份。如果可信第三方为政府权威部门,则第三方信任成本较低;如果可信第三方为大型企业,则可信程度较高,但仍存在一定程度上的委托代理问题。
对于去中心化预言机,其安全性取决于大多数节点是否诚实,并且在一旦发生数据腐败行为后,采取有效的惩罚措施。有效遏制数据腐败的前提是大多数的节点是诚实的(每个节点均为了实现自身利益最大化),只有在满足这个条件下,女巫攻击、镜像攻击和吃空饷(Freeloading)等腐败行为就会得到有效遏制。


成本定价分析


中心化预言机在成本和定价方面比去中心化预言机更具优势。
定价方面,二者在同样费用中心化预言机采用法币作为计价单位,不存在大幅波动的风险,而去中心化预言机一般采用其代币作为计价单位,波动幅度较大,无法遏制投机性需求对交易需求的负面效应;
成本方面,虽然二者的主要成本为智能合约执行的Gas Fee,但是去中心化预言机网络需要将结果在链上汇总和调用信誉合约。因此,对同一种数据服务请求,去中心化预言机的代码运行比中心化预言机需要消耗更多的Gas Fee,即使去中心化预言机将信誉统计、答案汇总和计算处理放在链下(Off-chain)处理也是一样。


服务效率分析


中心化预言机和去中心化预言机的服务运行效率因服务请求的时效性不同而存在差异。
对于高时效性的数据调用请求(如为DeFi金融合约实时调用ETH价格等数据来源确定的服务请求),中心化预言机因为无需多重签名的验证机制和链下答案汇总,只需要可信第三方单方验证和审查即可,所以其服务效率高于去中心化预言机网络,智能合约可以更快地获取数据。当其他条件不变时,数据调用的对时效性的要求越高,中心化预言机的效率优势就越凸显。
对时效性要求相对较低的数据服务请求(如获取甲骨文中小企业的数据库、年度数据和月度数据等),去中心化预言机更具备优势。一方面,去中心化预言机网络通过外部任务适配器(External Task Adapter)将复杂的数据服务请求步骤化(分布式),从而实现了资源的有效配置;另一方面通过数据来源多样化、汇总合约、信誉合约等机制设计分散了因数据来源本身问题带来数据失真的风险的同时,遏制了数据腐败的动机,从而进一步提高了数据的准确性。服务请求对时效性的要求越低,去中心化预言机网络的优势就更加凸显。