Chainlink 与预言机

2020-08-10 23:55:38 60
编者按: 以太坊预言机项目 Chainlink 最近跻身全球第 9 大市值项目,且日前遭人做空,一时令业内瞩目、热议纷纭。今天,通过 ArcBlock 技术社区[1] 今年 ......

编者按: 以太坊预言机项目 Chainlink 最近跻身全球第 9 大市值项目,且日前遭人做空,一时令业内瞩目、热议纷纭。今天,通过 ArcBlock 技术社区[1] 今年 2 月 28 日发表的《Chainlink 技术讨论》[2]与中信出版集团新近出版的《区块链实战:从技术创新到商业模式》[3]第 8 章《对智能合约和虚拟机的误解》最后部分,分享一下作者如何从技术和产品角度探讨分析 Chainlink 及预言机的价值和现状。

Chainlink 技术讨论

Chainlink 是老牌项目,我在 2017 年就关注过,除了 Chainlink,还关注过 Oraclize(现在改名为 provable.xyz)。两者类似,都是解决以太坊上的预言机(Oracle)问题。

外部 API 的预言机

以太坊的设计使得 EVM、智能合约是全封闭的沙盒,智能合约无法访问外部 API,这么做也是为了保证智能合约代码执行的确定性,因为一旦有外部 API 调用,不同以太节点在不同时候运行可能外部 API 返回不同结果(比如 API 本来就返回不同,或者临时出错了),因此无法达成共识。

解决方法是搞个外部的(链下)程序,把一些需要的外部数据写到链上,这样智能合约需要外部 API 的时候,实际上是从链上读取数据,这样就解决了确定性问题。这种把外部数据上链的程序就是预言机(非严谨定义)。同样想从链上触发一些外部动作,也可以类似进行。

Chainlink 与预言机

上述工作原理在 Chainlink 这张图得以展示。Chainlink 和 Oraclize 类似,都是设计了一个框架,其中一部分是一个链上的智能合约代码模版,一个是链下提供 API 调用的程序,这么做是为了能简化开发,应用在链上只需要调用其智能合约即可。

去中心预言机

可能有人怀疑,上面的预言机如果被人为操纵怎么办?首先一般这些预言机都是访问外部的 API,这些外部 API 某种角度而言都是相当中心化的,也就是无论预言机如何去中心化,你拿到的还是中心化数据,这点其实非常尴尬。不过这种用法互联网应用都搞这么多年了,为什么没问题?这个问得非常好。首先,因为没办法,这就是现实,一些 API 现在只可能中心化;其次,互联网应用本身也是中心化设计,并且采用准入(Permissioned)设计,互联网应用本身通常在安全环境下直接访问权威的外部 API,因此反而问题不大。而区块链需要用预言机(相当于中间人)去访问权威数据,因此导致获得的链上数据是第二手的反而失去了权威性。

Chainlink 和 Oraclize 的更主要解决的问题其实是如何让这些二手数据更权威一些。Chainlink 采用大量社区节点(相当于矿工)随机选择部分,并寻求共识的方式来部分解决问题。这当然解决了一定的问题,但是最好的办法还是不要中间人,可以直接访问权威 API。然而在以太坊类似架构的设计下,这是不可能实现的,因此必须采用这样的结构。

Chainlink 与预言机

Chainlink

Chainlink 的逻辑是吸引大量参与者运行 Chainlink 节点,这些节点从链上调度来执行一些 API 调用,Chainlink 则调度选择不同的节点,来防止 Oracle 作恶。他们采用 link 通证作为激励:应用开发者付出 link,节点运行者获得 link。

这个设计与 ArcBlock 的 Blocklet 多么相像!的确如此,因为我们设计 Blocklet 的时候接受了包括 Chainlink 在内诸多优秀设计的启发。

ArcBlock 是否需要 Chainlink 类似的预言机?

不需要。因为我们的设计不是以太坊的虚拟机架构,Blocklet 可以完全采用和互联网应用一样的架构,使得应用直接访问外部 API,完全不需要通过预言机这样的中间代理机制。

“等一等,这样说明你们不够去中心化啊?,你调用外部中心 API 啊,大哥,怎么去中心化?”

我们的设计让你直接访问权威 API,不存在中间人,没有中间人可以做恶,因此不需要 Chainlink 类似的预言机。看明白前面的原理介绍即可。

那么是否说 Oracle 没价值?

并不是, Oracle 是有价值的。然而 Chainlink 这类 Oracle 只是一种解决访问外部 API 的 Oracle,在 ArcBlock 架构中没有必要。

而区块链的 Oracle 是泛指一种能把链下数据可靠、确定性从链上获得的机制,这比解决访问外部 API 的 Oracle 要广泛很多,也困难很多。其实到现在还没有很好的有效率的机制。

声明: 当然,以上是我的一家之言,代表了我现在对 Oracle,对外部 API 类型的 Oracle 的认知以及判断,完全有可能是错的。欢迎讨论和指正。

区块链实战:智能合约在应用中的位置

当我们对区块链和智能合约越来越了解,就会发现其实区块链和智能合约其实只是一个完整应用中的一小部分,要构建一个完整用户体验的应用,光靠区块链和智能合约本身还远远不够。从这个角度而言,区块链和智能合约在一个系统中的地位类似数据库和存储过程(Stored Procedure)在系统中地位,它们都处于整个系统的核心关键,但要形成一个完整的用户友好的应用必须要其他部分的配合。

Chainlink 与预言机