# 预言机(一):a general idea **Published by:** [tom_ni](https://paragraph.com/@tom-ni/) **Published on:** 2022-04-15 **URL:** https://paragraph.com/@tom-ni/a-general-idea ## Content “预言机(oracle),起着连接区块链与外部世界数据的接口作用,将不确定的外部数据转换为确定的链上可使用数据。故在这个角度上,我其实更愿称它为’确定机’。”为何需要预言机试想一个场景,我们正在使用一个web3版的机票订购软件d-ticket,我们的合约可能是这样执行的: 1)d-ticket合约向各个供应商发送询价请求; 2)比较后选出最便宜的交易返回给我们。 就像下图这样,供应商2凭借1.066eth的最低价在本次询价中胜出!so far so good。d-ticket执行流程但当区块链中的节点们,试图对这次执行进行验证并打包上链时,问题出现了: 由于机票价格是实时变动的变量,节点们因网络延迟进行验证的时点各不相同,变动的机票价格使得节点们无法完成共识。因机票价格变动,节点们无法达成共识由此,我们的d-ticket无法完成数据的上链,这笔机票交易将以失败而告终。 这个例子背后,共性的问题是:区块链是一个确定性的系统,无法直接处理外部的变量数据。买机票仅是一个简单的场景,诸如deFi等金融场景下,外部数据的维度将更加复杂,变化更快,影响也更大。 预言机正是为处理这样的一个困境而诞生。借助预言机的解决方案还是回到d-ticket的例子,现在我们试图对它加以改进:如果有一个中间件,帮助我们将瞬时的机票价格加以锁定,上述的问题将迎刃而解。借助oracle询价并锁定与原来相比: 1)d-ticket委托了中间件oracle进行询价; 2)oracle除获取最低价外,还将状态锁定。 当区块链中的节点们,试图对这次执行进行验证时,也将与锁定后的oracle交互:借助oracle,共识得以达成最终,在oracle的帮助下节点间得以形成共识,交易数据得以上链,一次web3版的机票购买得以完成。 可见,在这个系统里: 预言机(oracle),起着连接区块链与外部世界数据的接口作用,将不确定的外部数据转换为确定的链上可使用数据。故在这个角度上,我其实更愿称它为“确定机”。预言机的中心化-Not a perfect solution然而遗憾的是,预言机的引入解决了共识的问题,却带来了中心化,成了系统中的薄弱点。“2019年06月Synthetix 遭遇 oracle 攻击,损失超过 3700 万枚 sETH”是个比较典型的例子。 据悉,当时的Synthetix通过2个接口向外获取汇率等信息,取平均后作为预言机的数据。但其中一个api频繁出错,导致预言机锁定的数据与实际数据偏差很大。 最终这个问题被发现且被用以套利,导致了大量的损失。 一句题外话,看到了不少web3中的安全事件都和系统中的中心化组件相关,某种角度也说明了去中心化确有其价值所在。chainlink-预言机的去中心化解决方案针对上述问题,chainlink提供了一个去中心化的预言机解决方案。以获取BTC/USD的汇率为例,chainlink的运行模式可概括为(informal): 1)多达21个节点会同时给出答案,chainlink取其中值; 2)如果有某几个少数节点造假(例如和最终答案偏差超过1%以上),则这些造假节点会失去预先存放在chainlink的质押币作为惩罚; 3)如果大多数节点共同参与造假,则某节点可以选择向第二层的监督节点汇报,这么做的好处是它可获得其他所有节点因造假而损失的质押币。 毫无疑问,比起中心化的oracle: 1)chainlink前进了一步,其目前也是oracle赛道的头部项目; 2)但亦存在对其机制的质疑声:如大多数一层节点与第二层的监督节点共同造假如何解决?毕竟,理想的机制下,系统的安全是由造假的成本>造假的收益来保证,deFi场景下造假的收益大于质押成本的情况很可能发生。 后续会有篇章对chainlink详细分析,此处想借着chainlink的例子,最终串起本文的:预言机的需求与诞生→中心化出现问题→提出去中心化方案,这一技术演变的过程。 这或是web3现在或未来许多优秀项目诞生的所谓“范式”。写在最后的话如果真实世界逐渐上链,预言机是否会失去它的价值?我认为会。 只是在这之前,我相信会有相当漫长的岁月,世界都处于web2.5的状态中。而在这段漫长的岁月里,预言机将持续扮演着链与外界接口的重要角色。 ## Publication Information - [tom_ni](https://paragraph.com/@tom-ni/): Publication homepage - [All Posts](https://paragraph.com/@tom-ni/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@tom-ni): Subscribe to updates