Chainlink 技术讨论

社区不少同学关心Chainlink,主要估计link​:chart_with_upwards_trend:的不错。 本文不关注link,只讨论下它是什么,以及ArcBlock里对应的是什么。

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

外部API的预言机

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

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

https://chain.link/assets/images/sub-hero-chainlink-diagram-3fb7d8e9.png

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

去中心预言机

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

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

https://files.readme.io/42576f7-cldiagram1.png

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的认知以及判断,完全有可能是错的。 欢迎讨论和指正。

link用代币做了激励和惩罚的经济模型,来保证链下数据的可信,相当于一定程度上把传统数据去中心化的连接到区块链上。

比如体育彩票,如果有个彩票DAPP根据体育彩票开奖结果同步开奖,如果DAPP直接连接到体育彩票官网读取数据,这个过程之中估计有很多地方可以影响甚至更改到这个结果数据到上传。如果这个DAPP开奖结果利益大到足够引诱让黑客等去做这个改动的话。

link则设计了一套类似区块链挖矿的经济模型,让很多节点可以读取体育彩票结果,比如官网,电视,报纸。然后把开奖结果统一上传,再根据结果,惩罚上传了错误结果甚至有意作假的节点。去中心化地做大程度保证准确的体育彩票结果上传到区块链上。

体育彩票开奖本身是中心化的,这个开奖过程没办法提升改进。等开奖结果出来之后,link可以把这个结果去信任(中介)的连接到链上。只能提升 结果出来~~链上这个过程。

link的经济模型可圈可点,本质上还是依赖由群众组成的所谓去中心化共识形成的权威,这是很理想的一种方式,因为只要权力在群众手中,就可以被操纵,无非是标的值得不值得。arcblock的解决方案是blocklet直接访问链外权威,这种方式看上去并不是全然去中心化的,但个人认为,这种方式更务实且效率更高。比较而言,link的方式在开始 时会让人有新鲜感,但在实用中可能需要很长的时间等待共识形成,最后会卡在效率与吞吐压力,arcblock则要快的多,调用链外权威即可……去中心化与中心化应该是一个融和态,不是对立或取代。

彩票是一个例子,需要尽可能可信的链下数据的可能还会有,比如波卡的交易所喂价,读取b网,币安等的btc价格。
甚至需要获得纳斯达克等的价格数据。 自动的保险,车联网物联网等。
能不依赖可信中介 尽可能准确客观的得到链下重要数据,不至于被各利益方为了重大利益有篡改的可能。

这充分体现出了中心化的权威数据的价值。这种价值,无法由去中心化形成,因为一旦涉及到专业精细的领域,群众根本没用。比方说cdc要调取某地病毒数据,预言机的顺利使用,可能需要几十年几代人的改造与培训吧……而中心化的权威数据形成,已经完成了这一步,因为都已经经过几十年的建设和优化形成了今天统一完善的集成和过滤和验证和确证生态。

但权威数据最被人诟病的是造假,这是预言机能得到理想主义者追捧的重要心理动因,比方说官方统计的死者数字与实际死亡人数。可以设想一下,这个实际的准确的数据,预言机制根本行不通,因为数据源首先得讲政治。

是的, 目前Chainlink实现的还只是API 调用。 对于“真实数据”,如彩票、股价等,其实用oracle技术还有各种困难,主要数据实时性、可靠性、权威性等一堆问题。目前最实际的还是从权威信源去获取是最有效率的。

作为链接外部数据和区块链的oracle,效率和安全都是问题,bloclet能直接调用外部数据当然是最好不过了

1赞