您现在的位置是:首页 > 区块链 > 区块链项目区块链项目

预言机Oracle:区块链与现实世界的桥樑

2020-01-07 15:24:02来源:河东好少年作者:云泽财富栏目:区块链项目人已围观

简介随着各式去中心化金融应用的蓬勃发展,其背后不可忽视的话题:「Oracle」也逐渐被重视。什么是Oracle?我们从《精通以太坊》的定义来看:《精通以太坊(Mastering Ethereum)》Chapter

随着各式去中心化金融应用的蓬勃发展,其背后不可忽视的话题:「Oracle」也逐渐被重视。

什么是Oracle?

我们从《精通以太坊》的定义来看:

《精通以太坊(Mastering Ethereum)》Chapter 11:Oracles

Oracles provide a crucial service to smart contracts:they bring external facts to contract execution.

(翻译)Oracle为智能合约提供关键的服务:把外部事实带进合约中执行。

Oracle概念示意图

Oracle概念示意图

在进入本文之前,想先问读者一个问题:

「要如何设计一个让智能合约取得链外信息的方法?」

希望读者在阅读本文之前都能先来思考看看,假设区块链上的智能合约需要区块链外部的信息来触发与执行,那么我可以如何做到这件事呢?这个架构的设计会长什么样子?有哪些决定性的细节呢?

好,接着我们进入本文的脉络:

为什么区块链需要Oracle?

由于区块链是一个封闭的系统环境,目前区块链只能获取到链内的数据,而无法获取链外真实世界的数据。

本质上来说,智能合约即写好了条件和结果的程式码,当特定条件被给予或满足时即能够触发。当智能合约执行需要的触发条件是区块链外部的讯息时,就必须要依靠Oracle提供数据,通过Oracle将现实世界的数据输入到智能合约中。

因为智能合约只能被动接收数据,无法主动去获取链外的数据,这就是区块链需要Oracle的原因。

Oracle示意图

Oracle示意图(ChainLink Whitepaper)

Oracle的实际应用情境

Oracle作为现实世界数据与区块链的桥樑,各式各样的区块链应用都需要Oracle提供外部数据。例如:稳定币、借贷平台、金融衍生品交易平台、预测市场、博弈游戏、保险等。

博弈游戏与随机数

我们首先来谈为什么「博弈游戏」需要Oracle。无论是拉霸、扑克牌、柏青哥等各样的博弈游戏都有个核心:「随机性」,由于在区块链上的随机数都是可以被预测和破解的,因此一种可行的方式是依靠Oracle从外部餵给智能合约不可预测的随机数。

智能合约保险与理赔

区块链上的智能合约保险也是,假设某间公司推出了通过智能合约执行的车祸保险,究竟有没有发生车祸、情节严重性及应理赔金额其实都必须要靠人来定夺并通过Oracle从外部餵入信息给智能合约才能触发理赔执行。

去中心化金融与即时价格信息

最常见且大宗的应用莫过于「DeFi」相关领域。各式各样与加币货币币价或现实世界中的金融产品相关的应用前仆后继被推出,而这些金融应用不可或缺的「即时价格信息」便是存在于区块链外的现实世界当中,必须仰赖Oracle来将信息餵入区块链(智能合约)当中。

光是说明可能不够清楚,我们实际来看一些牵涉Oracle的大型专案案例:

去中心化美元稳定币「DAI」的Oracle实例

以旧版的DAI:Single Collateral DAI(-现名SAI)来作说明。

不可讳言,在DeFi世界中最重要的Oracle即MakerDAO的ETHUSD价格Oracle,广大的去中心化金融应用生态系都围绕着MakerDAO与DAI开展。

(DeFi总市值约7亿美元;MKR总市值约5亿美元;DAI总市值约1亿美元)

尽管「MKR/DAI的代币对」与「DAI的抵押生成机制:CDPs(Collateralized Debt Positions)」都是完全去中心化地进行,但整个MakerDAO系统仍有一个重大的潜在罩门:系统需要仰赖一个「Oracle」提供准确的ETHUSD即时币价信息。

註:旧版DAI(SAI)的抵押生成需参照ETH的即时币价。假设ETH币价为150USD,则抵押一颗ETH最多可以生成100颗DAI,抵押品的价值必须大于铸造DAI的150%,亦即币价一但跌到149USD便会触发清算机制。

由于币价信息来自区块链外部(CoinMarketCap即为诸多交易所之加权平均现价)因此MakerDAO的智能合约必须从区块链外部不断获取即时币价信息以利CDPs与清算作业的进行。《MakerDAO Whitepaper》

我们马上来一探究竟牵动整个DeFi生态系的MakerDAO Oracle如何实例:

MakerDAO的Oracle架构

MakerDAO智能合约系统运行所需要的ETHUSD币价是通过一个名为「Medianizer」的Oracle智能合约来提供;Medianizer获取最新币价信息的方式是通过14个相互独立的外部「Price Feed」单位通过智能合约输入

MakerDAO Oracle架构示意图

MakerDAO Oracle架构示意图

币价的即时更新方式

14个「Price Feed」会随时监控MakerDAO官方公告的「先前共识价格」,并在每当:

「ETH最新时价」与官方公告的「先前共识价格」有一定比例差距时(目前定为1%)

距离上一次的价格更新已经超过6个小时

以上两个情况时,「Price Feed」将提交最新的币价信息给Medianizer。

Medianizer收到多个新币价信息后,将会取「所有收到币价的中位数」作为新的「共识价格」并输入MakerDAO生态系的智能合约中。这样的共识机制只要有超过50%的「Price Feed」提供正确信息系统便能维持安全稳定。

(至多6个「Price Feed」相互串通餵入错误币价信息时将不会影响最终的共识价格,即未达51%攻击)

至于这14个「Price Feed」究竟是何方神圣?

为什么他们愿意发送交易为MakerDAO提供币价呢?

让我们继续看下去!

MakerDAO的Oracle生态系运行

MakerDAO的独特之处在于它是一个去中心化自治组织(D.A.O.—Decentralized Autonomous Organization),从稳定币DAI的发行乃至Oracle都有设计去中心化的机制来运行。

MakerDAO Oracle生态系中不同的角色关系

MakerDAO Oracle生态系中不同的角色关系(MakerDAO Blog)

Price Feeds

为MakerDAO生态系提供币价信息的「Price Feeds」将获得DAI作为报酬,以此奖励它们的服务并阻挡它们行恶意行为的意图。(註:目前的DAI奖励是由Maker Development Fund基金资助,MakerDAO规划未来奖励将从Maker Protocol的stability fees提拨。)

而Price Feeds的真面目其实是由MKR Token持有者投票决选出的14个白名单地址(已知部分为大型交易所)。

表现好的地址(有持续、准时为MakerDAO提供正确币价信息)将能够留在白名单中赚取奖励报酬;

表现不好的地址(偷懒没有提供币价信息或提供错误币价信息)则可能马上被MKR Token持有者们罢免汰换掉。

小结

以上便是核心版的MakerDAO Oracle生态系解析,为了避免篇幅过长及便于阅读,有省略了部分细节。有兴趣更深入了解的朋友可以在上方篇幅中的底线处找到reference连结。

介绍完MakerDAO获取ETHUSD币价信息的Oracle实例方式后,可以发现MakerDAO需要Oracle餵入的是相对单纯的「ETHUSD」单一信息。然而,假设需要的是更多种类的信息,例如:在区块链上打造一个去中心化的预测市场,该如何将「球赛胜负」或是「选举结果」等信息餵入区块链呢?

紧接着我们来介绍另一个有趣的Oracle实例项目:

为去中心化预测市场而生的Oracle:Augur

Augur是一个架构上有些复杂的预测市场平台,我们试着长话短说精要核心地介绍它。

每个人都可以在Augur上创建预测市场,而预测市场简单来说就是提出一个「是非题」或是「选择题」。我们实际通过一个范例来瞭解Augur的实例流程,「假设」有人在Augur上开立一个预测市场题目:

「2020年台湾总统大选的当选人会是?A.宋O瑜、B.韩O瑜、C.蔡O文」

直到2020年1月11日选举结果出炉前,任何人都能够在Augur上针对三个选项进行下注(投入以太币)。

当结果出炉时,创建这个预测市场的人必须作为Oracle去将选举结果回报给智能合约以进行清算。

如果回报的结果是正确的,那么本盘预测市场将在经歷一段异议提出期间(3–10天)的等待后完成清算,就此结束。

然而,若回报的是错误的结果(例如:A.宋O瑜当选,却回报B.韩O瑜),或者是有人对于技术细节有不同意之处(例如:1月11日当天电视台已经开始开票了却还能在Augur上下注)。那么想提出异议的人能通过抵押部分的Augur平台治理代币「REP」至其它的结果来进入「争论期间」。

接着,其他的REP Token的持有者将作为这盘预测市场的「裁判」来投票:究竟哪个结果才是正确的?

系统会将获得最多票数的结果视为正确结果,所有投票给正确结果的REP Token持有者将可以获得奖励,投给其它结果的人将不会获得。(投票结果出炉后仍然会有一段提出异议的期间,如果无异议将清算结束;若是有人想提出异议需要抵押更多的REP Token展开新一轮的投票。)

这样的流程大致上如同下方这张官方制作的流程图所示:

Augur预测市场流程示意图

Augur预测市场流程示意图(Augur Medium)

至此,我们便核心地介绍完了Augur。总结来说,

在Augur上创建预测市场的人将作为Oracle。

REP Token的持有者将作为裁判,检视提出异议的预测市场并确保Oracle回报的是真实的结果。

Augur通过这样的奖励机制将能让平台变得更加值得信赖与可靠,对当中许多的技术实例细节有兴趣更深入瞭解的朋友可以参考官方的白皮书。

最后,我们来介绍以太坊上的第一个尝试提出的去中心化Oracle解决方案:

去中心化Oracle网路:Chainlink

有别于Augur通过「挑战机制」处理中心化Oracle(个人)餵入错误信息的问题。Chainlink试图解决Oracle餵入错误信息的方式是导入一个由去中心化Oracle网路组成的「中介层:Chainlink Nodes」。

比起由Chainlink这个组织本身提供数据信息会造成的中心化信任问题,Chainlink整合了从不同数据来源获取数据的众多「Data Feeds(数据提供者)」来提供一个共识过的「数据信息」,有些相似于MakerDAO的共识机制。

Chainlink的Oracle实例

Chainlink通过链上的「Oracle智能合约」与链外的「Chainlink节点」实现去中心化的架构。假设链上的一个「DeFi DApp(智能合约)」想要通过Chainlink取得CoinMarketCap的币价信息,那么取得信息的流程大致上是如下图所示:

Chainlink架构示意图

Chainlink架构示意图(完整的实例流程如下方所述)

Chainlink的Oracle实例流程

Chainlink白皮书

Chainlink实例流程图(Chainlink白皮书)

用户的智能合约(DeFi DApp)发起一个链上的请求;

Chainlink的智能合约收到请求后在链上记录下这个请求的内容;

Chainlink节点内的「区块链接口(Core)」抓取这个请求内容并发送给对应「外部接口(Adapter)」;

「外部接口」按请求内容至外部API(CoinMarketCap)取得数据信息;

「外部接口」将数据格式整理完成后派送给「区块链接口」;

「区块链接口」将数据信息回报给Chainlink智能合约;

Chainlink智能合约将一至多个节点回传的数据信息进行一次共识并发送结果给用户智能合约。

Chainlink白皮书

Chainlink实例流程图(Chainlink白皮书)

Chainlink的节点网路Oracle架构

Chainlink的架构核心即为由许多的数据提供者组成的链外「Chainlink节点网路」,想要成为在Chainlink网路中提供数据的节点必须要抵押特定量的Chainlink平台治理代币「LINK」Token。使用者如果想要通过Chainlink来取得数据信息时需要以LINK来支付费用,而这些LINK将会分配给提供正确数据信息的节点们作为报酬。而提供错误信息或是有其它异常行为的节点将会被扣除部分抵押的LINK作为惩罚。

通过这样的方式,去中心化的Chainlink Oracle网路试图通过抵押与奖惩机制来提供一个比起中心化的Oracle在架构上更加稳定的解决方案。

Oracle与经济学上的「赛局理论Game Theory」

介绍至此,相信大家都对于Oracle有了基础的概念与认识,各式各样的Oracle架构要解决的都是同一个问题:「如何『安全地』把链外的『正确』信息送入链上的智能合约中」。而之所以要强调「安全」与「正确」,即是为了尽可能减少Oracle餵入错误信息的动机,或是增加这么做的成本。怎么说呢?

我们再回到前述提到的台湾总统大选预测市场的案例来说明:

「2020年台湾总统大选的当选人会是?A.宋O瑜、B.韩O瑜、C.蔡O文」

假设这个预测市场是通过唿叫Chainlink来取得外部API信息,而我恰好是营运Chainlink节点来提供这个数据信息的人,且又刚好在Chainlink上只有我一个节点有提供台湾总统大选结果的API。

假设这个预测市场中A.宋O瑜的赔率最高。这边会出现一个有趣的赛局(Game):

如果我预期我能在这个预测市场中从A.宋O瑜选项获得的报酬价值多过我所抵押的LINK Token总价值,那么我便有十足的诱因去「重注下在A.宋O瑜选项上」。并在选举结果出炉后,这个预测市场唿叫我的节点来提供数据信息时「故意回报错误的A.宋O瑜当选信息」,藉此来赚取报酬。即使Chainlink后续发现我回报了错误的信息而扣押了我所抵押的LINK Token作为惩罚,但我经由回报错误的外部信息赚取了更高额的报酬。

通过上述的说明我们可以发现Oracle要解决的其实不只是技术问题,更重要的是「经济学问题」。无论是MakerDAO、Augur或是Chainlink,其实区块链外部的信息最终都仍是由「人」来回报给区块链。因此,一个好的Oracle应该要具备以下的特性:

「随着市场规模的扩大,Oracle的攻击成本也要相应的提升」

无论是球赛赌盘、保险、预测市场等各式各样需要仰赖Oracle来提供外部数据信息的服务,参与者都必须要有所认知:「一但餵入错误信息的预期获利大于成本,Oracle就有十足的动机来这么做,因此这个Oracle即处在不安全的状态中。」

我们在参与去中心化金融与各式的区块链应用时,除了注意如何操作、好不好用,当产品或平台牵涉到区块链外部的信息时,我们更应该注意这个专案的Oracle实例方式。

若是一个预测市场或赌盘的Oracle成本不会随着赌盘总投注资金的上升而让攻击成本上升,那么这个Oracle便存在着结构性风险。一但Oracle餵入错误信息的成本小于能够从赌盘获得的利润,将让平台陷入Oracle攻击风险当中。

各大专案的Oracle实例解析

我们实际带大家来看几个有牵涉到区块链外部信息的平台Oracle实例:

去中心化借贷平台Compound的Oracle实例

首先我们来看看大家最熟悉的「去中心化当铺」:Compound Finance,槓桿交易的操作员可以通过在Compound上抵押借贷资产来做多或做空。而Compound需要仰赖Oracle来获取即时的币价信息更新抵押率以进行清算。虽然号称新版的Oracle即将推出,不过截至撰文当下仍尚未启用,应仍是以白皮书上记载的旧版架构来营运。

我们直接来看Compound Whitepaper上的论述:

Compound Whitepaper

大意:Compound的Price Oracle会从前十大交易所抓取币价信息并进行整合。根本来说仍然是由Compound团队以中心化的方式来实例。

去中心化合成资产平台Synthetix的Oracle实例

接着看到Synthetix:以太坊上的去中心化合成资产发行协议,同时也是全世界DeFi领域总市值第二大的平台(截至2019.12.31约有价值1.7亿美元的加密货币资产投入该平台,仅次于MakerDAO)。通过抵押平台币SNX可以发行出各样的虚拟资产,如:法币(美元、欧元、日币等)、商品(金、银、石油)、虚拟货币(BTC、ETH)等。

Synthetix需要通过Oracle不断录入即时外部信息来追踪这些商品的时价,让投资者不必真的持有外币或黄金,也能参与这些投资标的的涨跌幅。而这样需要众多即时且大量外部信息平台的Oracle究竟如何实例呢?我们可以在官方文件Synthetix Litepaper中找到相关论述:

Synthetix Litepaper

Synthetix的Oracle实例

大意是:Synthetix的Oracle是由Synthetix的官方团队来运作,通过演算法抓取多个数据来源整合(就是Synthetix团队中心化来处理)。然而,最后提到有规划在未来将把Oracle给去中心化,就在2019年12月18日,官方宣佈了与Chainlink合作的消息,未来将会通过Chainlink来为Synthetix上的各样合成资产即时报价。

大意是:Synthetix的Oracle是由Synthetix的官方团队来运作,通过演算法抓取多个数据来源整合(就是Synthetix团队中心化来处理)。然而,最后提到有规划在未来将把Oracle给去中心化,就在2019年12月18日,官方宣佈了与Chainlink合作的消息,未来将会通过Chainlink来为Synthetix上的各样合成资产即时报价。

最后,我们来看另一个同样牵涉到Oracle的以太坊社交博弈平台:Bethereum。

去中心化运动博弈平台Bethereum的Oracle实例

如果你有玩过PTT上的乐透,那你就知道它在玩什么。简而言之就是体育与电竞赛事的博弈,与运彩不一样的地方在于Bethereum上的赔率不是由庄家订定,而是由所有的下注者共同决定的。用一场NBA比赛做范例说明:「2019/12/25快艇vs湖人」,比赛结果只会有两个选项「A.湖人赢、B.快艇赢」,当下注湖人赢的总额变多时,湖人赢的赔率就会下降;而快艇赢的赔率会上升。

好,Bethereum平台怎么玩不是重点(抱歉离题),重点是当这场比赛的打完,结果出炉后(快艇赢),必须要靠Oracle来将比赛结果信息给餵入区块链智能合约中,好让所有下注的总额能按比例平分给正确下注快艇赢的玩家。同样我们可以在官方的Bethereum Whitepaper中找到Oracle的说明:

Bethereum Whitepaper

大意:Bethereum获取链外信息的Oracle实例方式是会从多个数据来源搜集有效数据(反正就是Bethereum平台中心化处理)。不过最后有提到若结果有争议将会退盘,也意味着在智能合约中仍留有后门可供人操作。

结论

1.中心化Oracle与信任议题

可以看到在上述三个案例中(Compound、旧版Synthetix、Bethereum),Oracle都是由平台方中心化地来处理,对于使用者而言其实仍然存在一定程度的风险。根本来说使用者必须相信平台为了平台名誉不会乱搞(餵入假的数据资料)。然而,如此便又回到了中心化的问题当中,使用者信赖的对象仍然是「平台营运方」,而非架构本身,实是有违去中心化的精神与真谛。

2.观察专案的Oracle实例

在瞭解什么是Oracle之后,未来在参与去中心化金融与各式的区块链应用时,除了注意平台如何操作、介面好不好用、能如何赚钱套例外,当平台牵涉到区块链外部的信息时,我们更应该注意这个专案的Oracle实例方式,才不会让自己的宝贵资产陷于风险当中。

若是一个预测市场或赌盘的Oracle不会随着赌盘总投注金额的上升而让攻击成本上升,那么这个Oracle便存在着结构性风险。一但攻击Oracle餵入错误信息的成本小于能够从赌盘获得的利润,将让Oracle陷入被攻击的风险当中,任何人有权影响Oracle餵入信息的人都会有十足的犯罪动机。

至此,相信大家都已正确建立对Oracle的认识,目前Oracle其实仍是个较新的议题,不过诚如本文论述主

「Oracle要解决的不只是技术问题,亦是经济学问题」

许多的专家仍在着手研究提出更理想的Oracle架构,期待未来能看到更多样化的Oracle解决方案。

Tags:Oracle   区块链

很赞哦! ()