Chainlink 预言机的原理解析

本文来自于 8 月19 日 Chainlink 开发者社区中国负责人 Frank ,在 DApp Learning 分享会上对于 Chainlink 预言机的原理的讲解,以下是这节分享会的总结内容。有兴趣的小伙伴可以结合视频一起学习:
Chainlink 预言机的原理解析_第1张图片

为什么区块链无法主动获取外界数据

Chainlink 预言机的原理解析_第2张图片

区块链的特点

区块链是一个封闭的确定性系统,每一笔交易都需要不同节点共识,只有超过一定数量的节点共识成功,交易才会被真正认可,并写入区块链。

因为对于外部 API 的调用并不是一个确定性操作,所以智能合约没有实现外部 API 调用的功能。除此之外,因为交易广播到其他节点时,各个节点执行交易的时间不一致,所以获取的数据可能不同。比如 A 节点执行一笔交易,其中调用了一个API Call,在把这个交易打包入块让别的节点去验证的时候,其他节点也需要执行这个 API call,执行时间跟打包交易的节点执行时间不一样,得到的结果不一定相同,从而共识失败,导致交易无法写入区块链中。

区块链中的随机数

随机数在区块链应用中有大量的应用场景。

随机数的生成,同样是一个不确定的操作,因为随机数的生成是不可预知的,所以不同的节点,在执行时得到的随机数算法的时候,得到的结果肯定不一样,因此会造成交易执行结果不一致性从而无法达成共识。

通过外部预言机输入可验证的随机数,让链上智能合约只接受并且验证随机数,就可以保证交易执行的一致性。同时还可以实现随机数不可提前预知,并且可以通过证明保证其安全性。

预言机

由于智能合约无法调用外部 API 这一特性,所以诞生了预言机这个机制用来帮助智能合约获取外部数据,除了应用最广泛的价格数据以外,还包括一些天气数据,体育比赛数据,股票市场数据,交通数据,甚至包括总统选结果等数据。

除了提供数据,预言机广义上的功能也包括提供随机数和作为触发器实现智能合约执行,它们都算是链下的工具来和链上的合约进行交互。

中心化预言机的原理

在架构上,预言机分为两类,中心化预言机和去中心化预言机。最初的预言机解决方案中以中心化预言机为主。最简单的方式就是在链下搭建一个服务器,服务器从不同数据源获取数据。然后由开发人员在服务器中写一个脚本,根据时间间隔或者链上智能合约的状态,通过服务器把数据发送给链上合约。

中心化的预言机问题

虽然能够实现给链上合约发送“喂”数据的功能,但是中心化预言机有一个很大的问题是它存在单点失败的风险。用户在区块链上部署智能合约,本意是希望区块链网络中众多的节点来保证合约的安全性跟公平性。在这个前提下,对于外部数据,合约所依赖的数据却是通过一个中心化服务来输入,就会导致整体的安全性降低。就像木桶原理,合约的安全性、公平性在链上可以得到充足保证,每一个板都很长,唯独中心化预言机是短板,因此盛的水也变少了。

对于中心化预言机而言,网络故障或者宕机都会造成业务中断,导致用户无法及时获取数据。除此以外,中心化意味着运营方的单一,当中心化预言机发现一些 DeFi 协议或者 NFT 项目中依赖于它的数据,也不排除提供恶意数据获得利益的可能。上述情况的发生很难避免,我们称它为单点失败风险。

Chainlink 预言机

另一类是去中心化预言机,Chainlink 预言机就是一个去中心化预言机网络(Decentralized oracle network:DON)。

Chainlink 基于自身的预言机网络可以给链上的智能合约提供多项服务,比如说“喂价”,合约的自动化执行,生成可验证的随机数,获取任意外部的 API 数据,甚至能够把链上智能合约的一些计算或判断放到链下完成,然后返回结果,从而节省 gas 费。

Chainlink 如何解决单点失败风险

Chainlink 预言机的原理解析_第3张图片
Chainlink 预言机把中心化预言机节点替换为去中心化网络,在网络中有很多预言机节点,每个预言机节点都可以通过自己的渠道去获取数据,然后在去中心化网络中对获得的数据进行共识。这里的共识方式并不是 BFT,POS,POW 这个意义的共识,而是为了获取可靠的数据,比如说取平均数;或者类似于体育比赛里面,去掉一个最高分,去掉一个最低分,剩下的取平均数或者中位数,现在 Chainlink 采取的是中位数的共识方式。

Chainlink 把预言机通过去中心化的网络,在技

你可能感兴趣的:(预言机,Chainlink,智能合约)