vlambda博客
学习文章列表

区块链预言机架构原理:以 Oraclize 与 Chainlink 为例(上)

区块链预言机架构原理

Oracle


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


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


按照商业的组织模式分类,预言机可以分为中心化预言机和去中心化预言机。虽然二者的架构自下而上都可以分为网络层、操作层、合约层和应用层,但是二者在操作层和合约层上存在较大差异。


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


预言机在数据资产化、物联网、金融、保险、导航等方面具有较大的应用场景和可扩展性,但是仍然面临着一定的挑战需要完善。


预言机的背景与现状



预言机的起源

Oracle 在指古代原始人类在向神灵祈祷和祭祀时,神灵降下来的神谕。顾名思义,古代的象形文字和神谕大多数以甲骨文的形式记录,在艺术和文化上充满着神秘的色彩。


神谕(Oracle)的目的在于传达神的旨意从而预测未来,比如石器时代巫师对神的祈福和《易经》的八卦推演等。



传统计算机领域中的预言机

在传统计算机领域,预言机最早的雏形是由图灵于 1939年提出,由单带图灵机衍生而来。预言机本质上是一个用于回答问题的黑箱,只适合回答决策类问题(二级制「是」或「否」两个答案)和功能性问题,但是预言机并不具备大规模数据处理的能力。


美国高科巨头甲骨文公司在 1970 年创立时用 Oracle 命名,最初为联邦调查局提供关系数据库的软件服务,我们认为 Oracle 一词在数据库中,反映了关系型数据库解决了查找数据时「判断数据是否存在」等决策性问题,以及「查找并输出数据搜索结果」的功能性问题。


自此,计算机领域中的「预言机」应用开始逐步与数据的访问和调用挂钩。


传统计算机领域中的预言机真的可以独立预测未来吗?答案显然是否定的。


预言机在计算机领域扮演着对决策型事件结果的记录、沟通和反馈的作用,它仅仅只是完成数据的调用和信息反馈,所以数据计算和处理并不是它的侧重点。


在计算机领域中,对未来发展趋势的预测主要是通过人工智能(AI)算法实现,而 AI 算法的本质是数据的优化与迭代,更不要说利用数据预测未来。因此,当前的预言机需要预测未来需要与预测方法(AI 算法等)相结合。



区块链中的预言机

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


虽然智能合约允许在没有第三方的情况下进行可信交易,实现交易的可追踪且不可逆转,但是无法与区块链外的数据发生直接联系(如外部数据的获取与调用等),因此需要一个外部的图灵机将数据写入区块链或分布式账本中。


它在其中扮演着数据来源 API 接口之间桥梁的角色,从而实现区块链接口与外部数据 API 接口形成对接,而这个图灵机就是预言机(Oracle)。


预言机(Oracle)和智能合约天然的契合点在于,智能合约本质上是控制类的脚本代码,而预言机本质上回答决策性问题和功能性问题,二者只是实现数据的调用而非计算。


安全性方面,智能合约不具备大型数据处理的能力,而且容易造成计算溢出,因此需要添加预言机对外部数据的调用而非计算,从而规避了智能合约在调用智能合约时陷入图灵停机的困境;可扩展性方面,预言机用于解决「智能合约在指定数据来源的情况下,上传数据有可能会被篡改」的问题,从而弥补智能合约平台缺乏网络效应和可扩展性的不足。


预言机的定义与分类



预言机的定义

在计算机领域中,预言机(Oracle Machine),又称谕示机,是一种抽象电脑(图灵机),其决策机制为一个研究决定型问题的黑箱,它能够解决任何决策性问题或功能性问题。


在区块链领域中,区块链中的预言机扮演着将外部信息写入链上的角色,是整个写入机制的总体 ,它与至少一个预言者(Oracles)相连。


在区块链领域中,预言机是连接智能合约与区块链外部世界的中间件(Middleware),是区块链重要的基础设施,它的作用是为区块链上的智能合约提供数据信息。



预言机的数据获取方式

预言机既可以从链上获取原生数据,也可以通过网络爬虫或者传统第三方机构获取数据。


对于预言机从链上获取数据,由于链上应用(Dapp)落地不及预期,导致用户对链上数据的需求有限,不足以支撑该模式的长期发展。


如果预言机从链下获取数据,它既可以是授信传统第三方机构作为公链或者联盟链的节点给链上输出数据,也可以是预言者通过网络爬虫的方式抓取特定数据。


一般来说,对于数据调用要求低时延的服务请求,不适合采用通过爬虫的方式获取数据,因为爬虫的代码和数据的准确性受到网页结构和网络环境的制约;


目前主流的预言机项目(如 Chainlink 等)都采取授信第三方可信机构(如 Google、甲骨文等)作为节点,从而完善相关 DeFi 产品的喂价机制。


区块链预言机架构原理:以 Oraclize 与 Chainlink 为例(上)

图表 1:预言机的数据获取方式



数据预言机与爬虫的区别

目前,行业内有人认为预言机是在爬虫的基础上增加了去信任机制。


这是有失偏颇的。因为爬虫只是一种抓取网页数据的方式,而预言机虽然采用爬虫的方式获取数据,但是更多的是采用授信传统第三方机构作为节点的方式获取数据。


预言机和爬虫在数据输出格式上也有显著的差异。


一方面,利用爬虫抓取的数据极有可能是非结构化的,可读性较差,而预言机获取的数据在格式上必须符合智能合约调用的要求,用户和预言者可以根据智能合约的要求自定义数据的输出格式。


更重要的是,预言机在调用高频数据上远远优于爬虫,可以避免数据在获取的过程中因程序运行故障而陷入停机,而爬虫则很容易在程序运行过程中陷入中断。



理想预言机网络应当满足的条件

理想的预言机网络应当满足以下五个条件:


1.数据调用是基于双方相互信任的(不可篡改)。预言机在调用外部数据引入智能合约时,应当保证最终反馈给用户的数据与数据来源本身的数据一致,防止预言者中途篡改。


经过服务请求方的确认和其他预言者的验证后,如果调用数据结果无误,则将调用数据写入智能合约,并将交易记录上传到区块链上;如果调用数据出现不一致,则该交易将被定义为非法交易。


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


3.数据调用安全性高。预言机的设计必须有效遏制各种数据腐败行为,比如女巫攻击、镜像攻击、复制答案(吃空饷)等。


并且,通过强制节点在 TEE 环境中执行解密,并向区块链汇报所有用户和节点都能看到的通用答案。


4.符合激励相容原则。预言机激励机制和监督机制的设立必须实现激励相容,但是无论是 PoW还是 PoS都很容易造成多数人攻击。


因此,治理机制的设计必须充分调动其他竞争预言机的监督积极性,并且不能够将代币奖励和打包概率等决定预言者收益的指标相挂钩。否则,将不可避免的发生预言者和用户因利益不一致而产生的委托代理风险。


5.数据资产化。数据应当作为一种资产,根据其资源的重要性和稀缺性进行定价,以公允价值的形式写入智能合约。


目前,数据资产缺乏有效的定价机制,因为数据的种类千奇百怪,不同类型的数据对不同用户的作用也是存在显著差异,而目前数据定价权归数据的资源方主导,并没有实现去中心化。


预言机架构



预言机的起源与发展

根据商业组织形式分类,预言机可以是中心化的单一预言者的机制(如 Oraclize)——中心化预言机,同样也可以是去中心化的多个预言者的机制(如 Chainlink、DOS Network 等)——去中心化预言机。


中心化预言机(图表 2)由单一预言者(Oracle)为服务请求方提供数据,对某一特定的数据服务请求,在请求方指定 n 个数据来源并向中心化预言者发送合约请求后,服务商从 1 个或多个数据来源的接口调用数据,最终反馈给请求方的数据可以是 1 个数据来源的,也可以是从多个数据来源的结果进行汇总。

区块链预言机架构原理:以 Oraclize 与 Chainlink 为例(上)

图表 2:预言机的分类


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


去中心化预言机(图表 3)由多个预言者共同提供数据获取服务,利用纠删码(Erasure encoding)技术实现答案冗余,增强整个预言机系统的容错能力。

区块链预言机架构原理:以 Oraclize 与 Chainlink 为例(上)

图表 3:中心化预言机的关系模型

(对于特定数据请求)


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


中心化预言机和去中心化预言机两类除了底层的网络协议(TCP/IP 协议)、加密基础设施和硬件执行环境(一般为 TEEs)相似以外,二者在技术架构上有着显著差异。


其中标志性的差异是:中心化预言机需要可信第三方作为验证人或者审查机构自证清白,而去中心化预言机通过多个预言者(Oracles)之间进行相互验证。



中心化预言机技术架构

中心化预言机由可信中心提供数据通过第三方企业,提供智能合约运行所需要的外部数据,并将数据传输至智能合约中。


它的技术架构自下而上依次为网络协议(一般为 TCP/IP)、操作层、合约层和应用层。


区块链预言机架构原理:以 Oraclize 与 Chainlink 为例(上)

图表 4:自下而上的中心化预言机技术架构

(红字部分指中心化预言机特有的架构成分)


网络层

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


操作层

往上一层是操作层,操作层包括可信第三方验证系统、可信执行环境(TEEs)和格式配置器。


可信第三方验证的渠道必须是让用户可信的。一般来说,中心化预言机网络的审查人最好是由国家权威部门、大型企业(如 Facebook、Amazon 等)担任,并且审查人和项目方无利益关系。


比如 Oraclize 由 Amzon 云主机充当审查的角色,并且通过 TLSNotary Proof 证明自己是诚实的 。


硬件方面,智能合约的运行和数据调用均在可信执行环境(TEEs)上进行。TEEs 基于可信硬件(即与系统其他部分隔离开的硬件),拥有独立处理器和内存,其运行完全独立于操作系统、虚拟机监视器(Virtual Machine Monitor, VMM)、Bios 以及普通计算机的其他核心部件。


TEEs 分别在安全性和保密性方面发挥着重要作用。安全性方面,TEEs 建立多个安全层,将可信硬件与计算机最脆弱的部分完全隔离,从而大幅缩小了黑客可攻击的范围。保密性方面,TEEs 让节点无法查看运算数据,数据在链下进行传输和计算。


格式配置器一般是将最终传输给服务请求方的数据进行格式统一,为了增强数据的可读性的同时,使服务合约的执行便于验证,一般采用 JSON 格式。


合约层

在合约层方面,中心化预言机包括订单匹配合约、服务请求合约、数据调用接口和服务标准协议。


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



去中心化预言机技术架构

去中心化预言机系统架构自下而上同样可分为网络协议、操作层、合约层和应用层。


去中心化预言机系统虽然在网络协议和应用客户端上与中心化预言机系统无显著差异,但是因其 P2P (Peer-to-Peer)的网络结构使其在操作层和合约层上与中心化预言机系统存在显著差异。


图表 5:自下而上的去中心化预言机架构

(红字部分指去中心化预言机特有的架构成分)


操作层

操作层方面,去中心化预言机在中心化预言机的基础上,新增了多重签名机制和外部适配器。


去中心化预言机无需可信第三方机构的背书来自证清白,但是需要依赖多重签名机制让满足超过最小诚实节点数的预言者(Oracles)同时为相应节点签名 。


如 Chainlink 采用门限(Schnorr)签名技术,让其他节点来检查提供服务的预言者是否具有不当行为且交易是否合理,必须最少一半以上的可用节点在链下实施签名才能够实施交易。


更重要的是,外部 API 适配器的设置使预言机可以将复杂的数据调用需求拆分成多个子任务,将多个预言者以分工协作的方式参与到服务过程中。


合约层

去中心化预言机系统在中心化预言机系统的基础上新增了信誉合约和汇总合约。


信誉合约方面,因为去中心化预言机系统本质上是由多个预言者(Oracles)组成的服务网络,所以需要通过调用信誉合约来统计每个预言者的历史服务情况,对存在不当行为(如搭便车复制其他预言者提供答案的哈希值、镜像攻击、女巫攻击等)的预言者扣减信誉评分和已质押。


汇总合约方面,由于去中心化预言机是一个存在多个预言者的数据服务网络,因此,在大多数情况下存在多个预言者在规定时间内同时对同一种服务请求进行响应。


此时,预言机网络通过调用汇总合约,采取加权平均或中位数等方式对所有预言者提供的答案进行汇总。


在明日的推文中,我们将向大家介绍预言机项目比较和简析让大家能够更加深入的理解预言机的架构原理。


免责声明:版权归原作者所有,如有侵权请联系我们删除。