以太坊等智能合约之所以至今都无法被广泛应用,预言机问题是一个主要原因。

我们的区块链科普系列文章之前谈到区块链智能合约极有潜力颠覆传统的多方合约和价值交换模式。链下数字经济的规模远大于链上智能合约经济,两种经济模式并驾齐驱,但却没有交集,数字经济的特点是将设备接入互联网进行运算等操作。这种经济模式带来的结果就是数据和数据接口不断扩张,为人们理解世界的运行方式提供了前所未有的洞察。比如,可以基于网络搜索结果了解社会当前热议的话题,或者通过物联网传感器掌握路面交通规律。

区块链智能合约经济和传统的数据/API经济很有可能在未来会共同推动数据自动化发展,那么问题就来了:怎么将链上和链下世界连在一起呢?这是“预言机问题”最大的症结,也是本文将重点讨论的内容。

本文将分为五个部分,即:

  • 预言机问题的定义
  • 预言机的任务概述
  • 以太坊等区块链为何没有原生的预言机解决方案?
  • 中心化预言机存在哪些安全风险?
  • Chainlink是去中心化预言机在安全性和可靠性方面的标杆

预言机问题

预言机问题本质上是一个很基本的问题,那就是区块链无法自己获取链下数据,也无法向链下系统传输数据。因此,区块链其实就像是一台断了网的计算机,是一个与世隔绝的网络。正因区块链无法与外部建立联系,所以才能在安全和可靠性上做到极致。整个网络只需要使用区块链账本中已经储存的数据针对一组简单的true/false问题达成共识即可,比如“公钥持有者是否使用对应的私钥对交易签名?”、“公钥地址中是否有足够的交易资金?”以及“某一智能合约中的交易类型是否合法?”。区块链共识覆盖范围非常窄,因此智能合约具有非常高的确定性,可以完全按照合约中写入的代码逻辑执行,确定性远高于任何传统网络。

然而,智能合约90%的潜在应用场景都必须连接链下数据和系统才可以实现。比如说,金融智能合约需要接入市场价格数据才能执行合约交割;保险智能合约需要接入物联网和web数据才能理赔;贸易金融智能合约需要接入相关文件和数字签名才能执行放款。另外,还有许多智能合约需要在传统支付网络中用法币结算。以上所有数据都是在链下生成的,而这些数据无法直接传输至链上。

将链上和链下世界连接需要通过一个中间层,那就是“预言机”。

区块链预言机的作用是什么?

区块链预言机是将区块链安全连接至链下系统的中间层,区块链可以通过预言机连接至数据提供商、web API、企业后端、云服务商、物联网设备、电子签名、支付系统以及其他区块链等各种链下环境。预言机具有几大关键功能:

  • 等待响应——监控区块链网络,扫描网络中是否有来自于用户或智能合约的链下数据请求。
  • 获取数据——从一个或多个链下系统获取数据(比如由第三方web服务器运行的链下API)
  • 格式化——将来自API的数据转换成区块链可读的格式,并将链上数据转换成外部API兼容的格式,以此打破链上链下的交流屏障。
  • 验证——使用数据签名、区块链交易签名、TLS签名、可信执行环境(TEE)证明以及零知识证明等各种工具为预言机服务提供加密证明。
  • 计算——对数据进行运算,比如基于多个预言机提交的数据计算出中位数,或基于不同类型的数据(如:个人风险情况、市场费率和资金成本等)生成保险报价。
  • 广播——通过在区块链上签名并广播交易将数据和相关证明发送至链上智能合约。
  • 数据输出(可选)——在智能合约执行时向链下系统发送数据,比如将支付指令发送至传统支付网络,或与信息物理系统进行交互。

为了实现上述功能,预言机系统必须要在链上和链下同时运行。链上模块的作用是与区块链交互(等待数据响应)、广播数据、发送证明、获取区块链数据以及有时在链上进行运算。链下模块的作用是处理数据请求、获取链下数据并转换格式、将区块链数据发送至链下系统以及在更高级的预言机网络中进行运算。

Slides-03
集成Chainlink预言机的农作物保险智能合约从多个数据源获取天气数据,聚合成单一数据触发链上保险合约执行,最后在传统支付网络中支付赔偿金。

区块链为何无法解决预言机问题?

区块链由于其特殊的设计理念,具有极高的安全性和可靠性。上文中提到,区块链只利用储存在链上的数据针对非常简单的问题达成共识,而且这些数据是可以验证的。除此之外,区块链还采用去中心化模式,网络中所有节点都重复验证同一数据,确保任何一个或一小群节点都无法改变共识算法(PoW、PoS等)的规则或是对网络发起女巫攻击(即获得51%的算力)。这种机制可以在很大程度上保障确定性,特别是具有抗女巫攻击能力的去中心化网络。

然而,一旦涉及主观问题,或需要接入外部数据时,区块链就无能为力了,因为区块链网络中的节点无法访问链下数据。比如,“比特币的市场价格是什么?”或者“纽约的天气怎么样?”不同的数据源可能会产生完全不同的答案。那么问题就变成了:正确答案到底是什么?

将外部数据导入区块链基础层,会引发一系列安全性、可靠性和治理问题,这就像是潘多拉的魔盒一样,一旦打开就会变得一发不可收拾。这些问题会威胁到区块链核心的价值主张,即公正客观地计算交易。

其中最主要的问题是,由于节点可能访问不同的数据源,因此要如何保障数据质量呢?即使是最简单的数据请求,比如获取比特币价格,都可能会遇到巨大挑战,因为某一个网站或交易所的价格数据可能无法保障跟付费API数据同样的准确性和可靠性,因为付费API连接的是专业的数据聚合商,他们不仅服务质量高,拥有几十年的丰富经验,而且市场覆盖也非常广泛。任何人都可以运行准匿名节点并且通过节点提交数据,但不是所有人都愿意花钱订阅优质的链下数据接口,而且很难规定所有节点都这么做,因此要管理链下数据的质量是几乎不可能完成的任务。

另一个主要问题是可扩展性。每当网络中加入一个新的数据源,或现有数据聚合方式要进行调整,都需要大量的社区治理和协调工作,让网络中所有节点都达成共识。治理成本上升导致摩擦增加,拖慢了区块链其他核心功能的开发进程(比如PoS和分片),并限制了预言机创新速度。实际上,区块链基础层的复杂性越高,区块链应用的攻击表面和风险就会越大。甚至不使用预言机或不发出数据请求的应用都会受到牵连,因为预言机出问题可能会导致整条区块链无法运行。

因此,预言机并没有集成至区块链的基础层,而是作为一个独立的网络运行。这可以降低区块链的攻击表面,并保障极高的确定性,因为区块链只需要专注于达成链上共识。而预言机则拥有极高的灵活性,可以基于链下复杂的主观数据实现高确定性,不存在任何依存性或限制,不会对整条区块链产生风险。

中心化预言机带来的重大风险

智能合约的核心价值是通过技术手段执行合约条款,以此实现高确定性,去除所有人为操作带来的不确定性。为了实现这一目标,区块链不能出现任何单点失效,而这也包括预言机环节。预言机必须具有与区块链同样高的安全水平,以保障智能合约端到端的安全性。如果一台中心化预言机可以操控输入的数据并最终影响合约结果,那么将价值几百万的合约放在完全去中心化的区块链上运行还有什么意义呢?

Slides-02
中心化预言机一旦失效,整个智能合约也将无法正常运行。

无论是智能合约开发团队自己运行的预言机,还是通过第三方获得预言机服务,这两种情景中某一实体都可以通过操控预言影响合约执行。就算中心化预言机运营商不发起恶意攻击,仍有可能遇到各种中心化系统常见的问题,比如预言机下线、DDOS攻击、黑客攻击以及意外故障等,这些问题都会严重威胁到用户资金安全。

一旦合约价值升高,就算是最正直的中心化预言机运营商都有可能感到压力,贿赂、恐吓和监管压力会让其不堪重负,最终不得不屈服。这种模式无法扩展,无法在去中心化的基础架构上安全可靠地实现自动化。

为了解决上述问题,预言机需要做到与区块链同样安全可靠,但由于预言机问题和区块链问题有着本质的不同,因此具体实现方式会有所差异。

为了保障预言机层的高确定性,Chainlink开发出了去中心化的预言机网络,网络中具有多个功能模块,可以灵活组合,打造出适用于任何情景的预言机解决方案。

  • 开源——Chainlink是开源技术,整个区块链社区可以独立验证Chainlink源代码和功能的安全性和可靠性,并不断进行完善。
  • 外部适配器——节点可以安全地储存API秘钥并管理账户登录信息,这使智能合约能够从任何链下系统和API获取数据,包括受密码保护的认证API。
  • 去中心化——在节点和数据源层面都实现去中心化,避免出现节点或数据源的单点失效,为用户保障数据传输的及时性和完整性。
  • 数据签名——节点需要对发送至智能合约的数据进行加密签名,因此用户可以查看哪个节点发送了哪些数据,并查看节点的历史服务记录以了解其服务水平。
  • 服务协议——请求数据的智能合约与预言机运营商需要在链上签署具有约束力的服务协议,约定预言机服务条款以及奖惩制度,为用户保障链下数据的质量。
  • 声誉系统——将经过签名的链上数据传输至声誉系统,让用户可以做出理性选择,基于完成任务数量、服务客户数量和平均响应时间等各种指标判断节点的优劣。
  • 认证服务——为节点提供KYC、节点地理位置以及基础架构安全评估等认证,提升节点的安全性和可靠性。
  • 高级加密技术和硬件保护——零知识证明等高级加密技术以及可信执行环境等硬件保护可以为预言机带来额外的安全保障,比如向智能合约证明数据来源(注:证明数据来自某一服务器),向预言机隐藏数据内容,以及执行链下计算等。
Slides-01

以上是Chainlink众多功能的其中一部分,可以为预言机用户提供各种安全保障。在之后的科普文章中,我们还会深入探讨上述每个功能模块,帮助大家更全面地了解Chainlink网络。

Chainlink的这些核心功能能够将任何区块链上的智能合约连接至链下数据,并同时保障区块链最核心的高确定性,为推动数据自动化发展奠定坚实基础。

欢迎关注我们的推特账号,获得最新文章推送。你还可以关注我们的TelegramReddit账号,获得Chainlink消息推送。另外,也欢迎参与我们在Discord上的技术讨论。

搜索微信号ChainlinkOfficial加入Chainlink中文微信社区,搜索微信号neils_加入Chainlink中文开发者社区。