作者: 冒志鸿(ArcBlock 首席执行官、首席架构师)

编者按: 以太坊预言机项目 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 和 Oraclize 类似,都是设计了一个框架,其中一部分是一个链上的智能合约代码模版,一个是链下提供 API 调用的程序,这么做是为了能简化开发,应用在链上只需要调用其智能合约即可。

去中心预言机

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

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

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)在系统中地位,它们都处于整个系统的核心关键,但要形成一个完整的用户友好的应用必须要其他部分的配合。

一个完整的以太坊的 Dapp 中,其实以太坊和智能合约只是占了一小部分,在这张图的例子中这基本是一个完整的 Web 应用再加上和智能合约交互的部分。

上图展现了一个典型的采用以太坊的区块链应用的架构方式,除了传统的 Web 服务器、数据库服务器外,部署在区块链上的智能合约是一个关键。如果没有这个关键的部分,这个应用可能和一个传统的 Web 或移动应用没有任何区别。

在这样的设计里,我们可以看到其实完整的应用逻辑有一小部分是在“链上”也就是智能合约里完成的,而另一部分是传统的应用实现方式,也就是“链下”的逻辑。实际上几乎每个区块链的应用都包含了“链上”的部分和“链下”的部分。

一部分逻辑放在链下可能是因为不必要,比如和界面相关的逻辑,但还有一些逻辑是无法用智能合约来实现的。比如有人设计一个智能合约来和朋友打一个简单的赌“如果中国足球队赢了,我就如何如何”,听起来很简单很容易实现,但实际上最大的问题是区块链没有一个可靠的方法来知道是否“中国足球队赢了”是一个事实。

用以太坊的智能合约为例,它只能访问自己链上的状态,链外数据是无法主动获取,一个智能合约并不能简单地调用一个 API 或者访问某个 Web 服务来获取链下的数据,这样的设计并不是以太坊的局限性,而是故意这么设计的。智能合约的代码逻辑最强调的是“确定性”,也就是无论运行多少次、在什么环境下运行,都应该确定地返回相同结果。一旦引入外部的 API 后,外部的 API 可能是不确定性的,或者因为网络故障暂时无法访问,或者访问结果出错,这时候智能合约就无法获得确定性结果。

EVM 的沙盒机制: 沙盒就是一个限制应用程序对系统资源的访问的运行环境,沙盒很多情况下都是实现在虚拟机(VM)之中。EVM 是一个相对封闭的环境,不支持对网络和文件系统的直接访问。

解决这一问题的方法之一是预言机(Oracle), 这也是目前区块链行业的热门课题,业界希望在此取得突破,以达到链上链下、链和链的数据状态一致的目的。Oracle 这个词最初是来源于古希腊宗教,意为“神谕、先知、预言”。区块链预言机,则是一个能提供“可靠的”外部信息的平台,预言机本身也可以认为是一种特殊的智能合约。

在理想情况下,预言机能提供一种无信任(Trustless)或至少近乎无信任的方式来获取外部数据(“真实世界”或“链下”),例如比赛结果、天气信息、黄金价格等等,然而要实现这样的理想状况至今仍然是无解的。如何实现一个去中心化预言机是个非常有挑战的问题,有一种思路是让网络中大量的用户群体协作,结合一些激励机制来作为一个区块链预言机提交来自外部世界的数据,另一种思路则更“中心化”一些,但实现的难度要低很多,选择一种中心化的方式并信任此数据来源,采用各种技术手段来防止单点故障或降低临时错误的可能性,采用例如随机选择参与的数据提供节点的方法来防止恶意或合谋的攻击等。目前很多的所谓“预测市场”的预言机采用前一种做法,实际上迄今未有大规模成功的案例;而更多的让区块链获取外部 Web 服务数据源的预言机采用后一种做法。

一个理想中的假想预言机设计: 即用户的智能合约把请求给链上预言机合约,通过链下的 API 接口获得外部数据,更确切的说是外部把数据给链上的预言机合约,然后预言机合约再把数据给用户的智能合约。在互联网世界里,这样的调用数据 API 是非常普遍的。但区块链与外部世界的数据交互,却不能进行这样的简单的操作——一个最重要的原因就是外部 API 的“不确定性”返回。

2018 年 11 月 6 日,中国人民银行发布的《区块链能做什么?不能做什么?》报告中对预言机定义是“区块链外信息写入区块链内的机制,一般被称为预言机 ”,显然这是在以太坊设计架构的基础上给预言机的一种定义。预言机是区块链与现实世界进行数据交互的桥梁,应用场景非常多,可以说一切需要与链下进行数据交互的应用都需要类似预言机的机制。因此目前制约智能合约处理任何业务逻辑的一个重要技术难点就是预言机。

目前网络上很多关于预言机的产品或论述基本都是基于以太坊或类似设计的区块链的,那么对于和以太坊设计思路不同的区块链是否存在相同的问题呢?基于以太坊或者类似架构的区块链的预言机一般是把链下的数据首先写回到链上,这样智能合约就可以访问这些链上的数据,预言机负责保证这些链上数据和链下是吻合的;而对于智能合约并不是完全采用虚拟机的机制来执行的区块链,例如 Hyperledger 等,有可能智能合约的执行环境允许直接访问链下数据,那么实现起来会更为简单。本质上无论采用何种架构的区块链都会存在相同的问题——由于外部数据不能保证其确定性,而智能合约需要其具备确定性,这是一个必然存在的矛盾。

虽然迄今为止还没有出现过完美的去中心化预言机,从而使得智能合约在处理我们日常逻辑的时候仍然存在一定困难和不完美,但不可否认这个趋势离我们过去只能选择信任中心化服务的互联网服务时代又向前迈进了大大的一步。我们在今天不必高估智能合约的能力,但也绝对不能低估在未来 10 年里智能合约可能取得的巨大进展和应用前景。

References

[1] ArcBlock 技术社区: https://community.arcblockio.cn/
[2] 《Chainlink 技术讨论》: https://community.arcblockio.cn/t/topic/242
[3] 《区块链实战:从技术创新到商业模式》: https://books.arcblock.io/

更多ArcBlock区块基石信息,可关注以下渠道了解:

  • 官网 | https://www.arcblock.io

  • ABT 技术社区 | https://community.arcblockio.cn

  • ABT 链网 | https://www.abtnetwork.io

  • ABT 钱包 | https://abtwallet.io

  • ABT 换币服务 | https://swap.abtnetwork.io

  • 开发者文档 | https://docs.arcblock.io

  • Twitter | https://twitter.com/ArcBlock_io

  • Facebook | https://www.facebook.com/arcblock.io/

  • LinkedIn | https://www.linkedin.com/company/18355951/

  • Reddit | https://www.reddit.com/r/arcblock/

  • Medium | https://medium.com/arcblock

  • 微博 | https://weibo.com/realArcBlock

  • 微信群 | 加“ABT共识社区小助手(ID: L520abt1314)”好友入群

  • 电报群 | Telegram groups:

    Telegram (English): https://t.me/ArcBlock

    Telegram (中文): https://t.me/ArcblockAsian

点击获取 区块链实战

Chainlink 与预言机 | ArcBlock 博客相关推荐

  1. 实习生娜娜(含视频) | ArcBlock 博客

    作者: 陈天(ArcBlock 研发副总裁) 来源: 程序人生 (ID:programmer_life) 我对实习生的要求,除去学习能力外,便是足够长的实习时间.所谓「足够长」,我的定义是至少两三个月 ...

  2. ArcBlock 博客 | Exchange 服务的工作流程以及如何集成到 OCAP 服务

    作者:周蕾  (ArcBlock 团队后端开发工程师) 为帮助大家深入了解 ArcBlock 的开放链访问协议的实现和技术细节,我们工程团队将定期接受采访或撰写技术博客来"解密" ...

  3. ArcBlock 博客 | OCAP超简易集成攻略(Android 篇)

    作者: Nate Robinson(ArcBlock 团队移动开发工程师) 5 天后,ArcBlock 第三场.中国的第一场内测版黑客马拉松即将在北京举行,截至本文推送之际,已有 56 人报名,剩余名 ...

  4. 在 ABT 节点上启动 Solid 服务器 | ArcBlock 博客

    作者: Matt McKinney 译者: 陈俊 为了把数据合法所有权归还给每个网络用户以破除当今互联网越来越集中垄断的格局,万维网之父蒂姆·伯纳斯-李从 2015 年开始研发 Solid,并于 20 ...

  5. 使用 Play with Docker 部署 ABT 节点 | ArcBlock 博客

    作者: Matt McKinney 译者: 陈俊 使用 Play with Docker 部署 ABT 节点 作为循序渐进的快速指南,本文为你介绍如何使用 Play with Docker (PWD) ...

  6. 从 TikTok 危机看去中心化应用未来曙光 | ArcBlock 博客

    作者: 陈俊(ArcBlock 副总裁) 45 天之后,抖音海外版 TikTok 不是被美国公司收购,就是被勒令退出美国市场--这款风靡海外青少年用户的短视频分享应用最近极具戏剧性的遭遇无疑牵扯了许多 ...

  7. Chainlink平台预言机

    1. Chainlink 预言机的双层结构 开源的去中心化数据获取机 两层结构 1.1 多个预言机节点 实现了预言机的去中心化,保证数据上链服务的可靠性.多个预言机节点保证了当任意一个预言机出现问题( ...

  8. 如何轻松通过 ArcBlock 的招聘流程 | ArcBlock 博客

    作者: 冒志鸿(ArcBlock 首席执行官.首席架构师) ArcBlock 成立发展这几年来,我们一直没有停止过招聘,不同阶段的区别可能只是空缺职位的多少和节奏的快慢.我们的团队建设原则是" ...

  9. ABT 链节点五步速成法 | ArcBlock 博客

    舒适 读完需要 7 分钟 速读仅需3分钟 作者: 舒适(ArcBlock 数据工程师) 上周 ArcBlock 发布了 Forge SDK,旨在为开发者提供业内最佳区块链应用开发工具.从此为 ABT ...

最新文章

  1. Centos 64位 Install certificate on apache 即走https协议
  2. ORACLE数据库查看执行计划
  3. spring cloud网关(zuul)使用RateLimiter限流,使用jMeter性能测试高并发
  4. 请说明一下web.xml文件中可以配置哪些内容?
  5. 根据不同地区的名称显示不同的页面
  6. SVN“验证位置时发生错误”的解决办法
  7. C语言封装带省略参数的函数,C与C++的函数声明中省略参数的不同意义
  8. PAT 乙级 1003. 我要通过!(20) Java版
  9. vue循环渲染本地图片不显示?
  10. 贺利坚老师汇编课程24笔记:内存单元[...]和(...)内容
  11. dubbo安装和使用
  12. 12.docker inspect
  13. 被称为最好最易理解的MATLAB入门教程
  14. 神经网络的BP算法推导详解
  15. linux转录组kegg注释,蛋白质组学KEGG注释详解
  16. 3D数学 AABB(轴对齐矩形边界框)
  17. USB无线网卡和PCI-E无线网卡如何选择?
  18. 【饭谈】:开发说他要是不写bug,测试就会失业了。
  19. 最后一公里极速配送(三)
  20. 微信开发者工作遇到的ERROR

热门文章

  1. client-go QPS、Burst和令牌桶
  2. 新概念书店无非内容电商线下变体,西西弗终难逃被资本吞并命运?
  3. 后端服务HTML转图片实现方案
  4. 蒙特卡洛树和alpha go
  5. Java实现简单井字棋(OX游戏)V2.0
  6. STM32开发板学习——GPIO功能、5v兼容口
  7. sweetalert弹窗组件的简单使用
  8. JavaScript 经典例子
  9. Data fountain 基于人工智能的恶意软件家族分类 参赛总结
  10. xv6 6.S081 Lab7: Lock