“有的项目看完白皮书就知道一定能成”,回溯初代Chainlink

TL;DR

  • Chainlink从一开始就洞悉了Oracle的本质:事实优于信任。所以本文的重点在于回溯Chainlink最原始的版本是什么样子,会一笔带过VRF的一些概念,同时也会提一下2.0(直接借鉴已经被人谈过很多次的2.0相关文章的内容,因为能看出来的东西大同小异)。
  • Chainlink的核心目标是对接链上和链下环境,所以在架构上采用了链上+链下的方式,并且无论是链下还是链上均采用模块化的形式,方便升级的同时,允许其他协议能够以最简单的方式接入Chainlink。
  • 为了平衡CIA(即隐私性,完整性,可用性),尽量靠近“理想型预言机”,Chainlink在链下部分提出三种互补方案:分布式数据源,分布式预言机,可信硬件。
  • Chainlink的VRF生成方法利用了区块链著名的签名验证功能:即合约只能使用在同一区块链环境中被验证通过的随机数。
  • 最后,从始至终,Chainlink的“野心”就不止是链上世界。而是包括了广义上的区块链应用。

什么是“完美的”预言机

预言机出现的必要性估计不用多说,但是在我们似乎很少讨论到一个话题:什么是“完美的”预言机。在这一点上,无论我们增加多少其他附加条件,完美预言机最核心的特点起码应该满足经典的CIA三角 — — 保密性,完整性(也被称为安全性),可用性。

而数据完整性是预言机的基石,无法完整获取符合条件的预言机,基本也没啥用。所以我们首先要对预言机的完整性有一个清晰的定义,其论证最初源于以下思想实验:

想象现在有一个可信的第三方(TTP),即理想的实体或功能,总是能忠实执行所有指令,现在由这么一个第三方负责运行一台预言机。我们将这台预言机称作“ORACLE”。同时,我们假设这个可信第三方获取的所有数据都来自一个完全可信的数据源,那么,这么一台完美预言机会如何工作呢?

图片来源:https://research.chain.link/whitepaper-v1-chinese.pdf

基本上,它的流程会分为三步:

  1. Oracle接受数据请求。这个请求会明确自己要求的数据源,时限,以及请求内容。
  2. Oracle获取外部数据。根据请求的各项参数获取对应外部数据。
  3. 返回结果给请求方。

由于我们的预言机和数据源都是完美的,所以在任何时候任何条件下都能给到符合请求的完整数据反馈。

而完美预言机的第二个特点就是隐私。我们知道在区块链上发送数据请求的时候,内容是公开的。但是一些链下数据本身具有极强的敏感性,比如某人航班信息。所以为了保护数据请求的隐私,理想预言机会对请求数据进行加密。

最后,完美预言机的可用性也是无暇的:永不宕机的同时,不会拒绝为任何一个智能合约服务(即兼备抗审查性)。

当然,我们也知道,完美的预言机是很难实现的。即使我们能保证链上合约不会出问题,但是对于数据源的信任危机,以及预言机本身的宕机问题都无法避免。更为重要的是,我们这里设定的可信第三方预言机 ORACLE 只是一个抽象概念。而没有一个服务提供商是百分之百可信的。

所以,Chainlink出现了,用了一套非常巧妙的设计方案去尽量靠近理想的预言机。我们先从它整体的工作流程看起。

Chainlink工作流程

Chainlink整体工作流程可以用下图来表示:

图片来源:https://research.chain.link/whitepaper-v1-chinese.pdf
  1. USER-SC发起链上请求;
  2. CHAINLINK-SC 为预言机记录事件(本文所有提到的CHAINLINK-SC指的是一系列相关合约,不是单一的合约);
  3. Chainlink Core收到请求,记录并向适配器发送任务;
  4. Chainlink 适配器执行任务,向外部 API请求数据;
  5. Chainlink 适配器处理返回数据并返回至Core;
  6. Chainlink Core件将数据传回 CHAINLINK-SC;
  7. CHAINLINK-SC 将数据聚合成单一数据,并返回至USER-SC。

从上面的流程可以看到,因为预言机本身业务的特性,Chainlink采取链上+链下的架构。那么接下来,我们就可以看看Chainlink的具体架构及解决“如何靠近理想预言机”的方案。

链上架构

图片来源:https://www.panewslab.com/zh/articledetails/rx8tp00nc4qa.html

需要明确的是,Chainlink针对的是由智能合约发起或第三方委托发起的数据请求,而这类请求被称为“请求合约”(Requesting Contract),在上面的工作流程图中,用USER-SC表示。

而负责接受请求的接口本身也是一个链上合约,用CHAINLINK-SC表示,具体由Service Level agreement Contract +为了更高效安全的完成整个流程, Chainlink在链上部署的“订单匹配合约”,“聚合合约”,以及“声誉合约”,一共四个合约组成。

这些链上合约主要负责的工作有三点:

  • 预言机选择 — — 首先,Chainlink 用户需要制定服务水平协议 (SLA),指定一组所需的数据要求,保证该请求合约内的LINK余额足够,进而发送该请求给CHAINLINK-SC。当然,这个过程会涉及到链上声誉合约来推荐符合条件的预言机,同时也用到了订单匹配合约来自动广播请求(中间会牵扯预言机竞标等过程)。最后双方接受报价开始服务。
  • 数据自动上报 — — 这是预言机与外部资源连接并获取 SLA 中请求的真实世界数据的地方。然后数据由预言机处理并发送回在 Chainlink 区块链上运行的合约。这一点会在后面的链下架构里进行详细说明。
  • 数据聚合 — — 因为选择的预言机不止一个,所以这些预言机返回的结果会被上传到聚合合约里,经过加权算法算出结果,并将结果发送回USER-SC具体的合约函数中。
  • 但是我们也需要注意,每种数据的聚合方式是不同的,这里面还牵扯到异常值处理的问题。所以并不存在一个万能聚合合约,Chainlink允许用户在标准化聚合合约套件的基础上开发定制化的聚合合约。

可以看到,由于链上架构走的智能合约,本身就已经是以去中心化的方式去执行,所以在链上架构的部分,并没有过多的专门去中心化设置。但是在链下,条件就不一样了。

链下架构

通过上面的工作流程图,我们可以看到Chainlink的链下部分就是它最引以为傲的“去中心化预言机网络”的核心。涵盖了节点和从链下世界获取数据这两项最重要的功能。具体到各个执行组件,其又能拆解成如下几个部分:

  • Chainlink Core — — 节点运行的核心软件。负责与区块链交互,任务调度并且平衡资源。
  • 外部适配器 — — 通过创建外部适配器与外界(主要是数据源)API进行交互。

而节点运行的相关软件功能我们其实不必去深究,只要知道节点是如何给我们返回可靠数据即可,这就牵扯到可信中立的问题,即这个链下架构如何去中心化

在文章的一开始,我们就提到了完美预言机实现不了的几个原因:数据源的信任危机,预言机可用性问题,第三方信任问题。

所以针对这三个问题,chainlink提出了对应的三种方案。

  • 分布式数据源 — — 应对单一数据源的信任危机,最简单的方式就是从多个数据源获取数据,并最终聚合成单一数据。但是,如果数据源之间的数据是互相关联的,例如A的数据是来源于B,如果B的数据本身有问题,A的数据也就会有问题。所以为了尽量减少这种关联性错误,Chainlink选择了较为传统的对数据源进行独立性检测,定期出报告
  • 分布式预言机 — — 这也是为Chainlink是预言机网络的原因之一。为了解决单个预言机宕机的问题,Chainlink采用了预言机网络的形式,每个节点都有自己的数据源集合,重叠与否无所谓。
图片来源:https://research.chain.link/whitepaper-v1-chinese.pdf

但是这里就遇到前面没有细讲的一个问题:这些节点返回的数据有错有对,如何去正确的聚合这些数据,产生最终的数据呢?

链上聚合

这里我们能想到最简单的方式就是在接受端去聚合。放在chainlink工作流里,就是在CHAINLINK-SC这边进行链上聚合。简单灵活,并且拥有很高的可信度(智能合约本身的特点)。虽然也有“freeloading”的问题(预言机B可以作弊看到预言机A返回的结果,直接抄袭。这样自己就不用花钱去请求外部数据了),但是Chainlink设计了一套较为巧妙的方式去避免这个问题。我这边就直接放一下白皮书里的内容:

用 3f+1 个节点保证可用性。它使用先提交后解密 的机制避免吃空饷行为。预言机的提交被取消,只有在所有结果都提交后才会被公开, 因此无法抄袭。

但是,我们知道,在链上执行这一系列操作需要的成本很高,而且效率也低。所以更为合适的是看能否在链下解决这个问题。这就是后来chainlink采用的方案,链下聚合。

链下聚合

说到链下聚合,因为Chainlink本身链下架构的设计,就势必会牵扯到“共识”的问题。

在这里,Chainlink没有采取经典拜占庭共识算法去聚合结果,而是采用了Schnorr签名机制。这个机制我们之前讲过很多次了,这里就不再赘述。大概来说,如果总的节点数量是n,只要有任意n/2+1个节点签名,就可以构成一个完整合法的签名,最后形成聚合结果。同时这样做还能通过签名看到哪些节点参与了贡献,方便出现问题时进行追溯,例如遇到“freeloading”的情况,Chainlink就设计了对应策略去进行甄别和惩罚,详细的链下聚合流程算法可以看官方白皮书。信任危机解除了,CIA三角里的完整性和可用性也都有了保证,那么只剩下最后一个问题:隐私。

Chainlink如何确保请求的隐私性

在初代官方白皮书里,Chainlink非常强调可信硬件的隐私保护功能,认为纯链上的加密方法无法彻底解决隐私问题,所以一定要和硬件结合。其关于可信硬件的描述也是基于Town Cier预言机(康奈尔的项目,后来被Chainlink直接收购了)的基础上进行了改进。而他们最欣赏的就是英特尔的SGX。

而在硬件基础上,Chainlink 为保障数据隐私和防篡改性,采用了隐私预言机解决方案 — — Deco (也是收购的康纳尔项目),拓展 HTTP/TLS 协议(互联网数据传输的主流方式)的数据安全功能,从而实现高级加密技术和零知识证明,保障数据隐私和防篡改性,包括使用数据的应用本身在内的第三方都无法查看数据的内容。

Chainlink花费了不少篇幅去说明他们解决隐私的策略,有兴趣的可以自行详查。

其他特点

VRF

这里先稍微说下VRF。尽管在一开始的设计里,Chainlink并没有VRF的相关功能,但是后面出现这个服务后,对整个区块链的影响可谓天翻地覆,尤其是gameFi和NFT。不过,我们需要明确的是,这里的“随机”指的是“任何没有seed或密钥的人都完全无法预测(即概率均匀分布)”。

图片来源:https://blog.chain.link/chainlink-vrf-on-chain-verifiable-randomness-zh/

简而言之,智能合约会向Chainlink或Chainlink预言机网络提供一个seed来请求随机数。这个seed是预言机无法预测的,会被用来生成一个随机数。每个预言机都会使用自己专属的密钥生成随机数。当结果和证明在链上发布后,可以使用预言机的公钥和智能合约的seed进行验证。这个方法利用了区块链著名的签名验证功能,合约只能使用在同一区块链环境中被验证通过的随机数。其用的是Goldberg可验证随机函数,具体细节可以参考这篇论文:

https://eprint.iacr.org/2017/099.pdf?spm=a2c6h.12873639.article-detail.8.5a1c735fTBdfso&file=099.pdf

至于后来的2.0白皮书,则重点推出了几项功能:

  • 重新定义去中心化预言机网络的功能
  • Chainlink 2.0白皮书则引入了“多重去中心化预言机网络”(下文简称DONs)框架,框架中有多个去中心化的预言机网络,并可以实现互操作性。每个预言机网络都由一系列节点组成,可以双向传输数据,并使用各种共识协议展开去中心化的链下计算。Chainlink DONs与layer-2技术类似,都能连通现有区块链,定时同步链下计算的数据输出和状态变更,确保预言机报告的准确性,并且对链下预言机纠纷进行仲裁。
  • Chainlink DONs将助力DeFi和智能合约经济发展
  • Chainlink BUILD:允许项目方支付其原生代币的3%-5%来换取预言机服务,帮助还没有开始产生收入的新项目接入Chainlink的服务。这些代币将流向Chainlink网络和LINK代币的质押者,为Chainlink生态中的参与者带来了获得其它早期项目代币的机会
  • Chainlink SCALE:Sustainable Chainlink Access for Layer 1 and 2 Enablement”,即支持Layer 1和Layer 2区块链可持续地访问Chainlink,针对的是Layer 1和Layer 2区块链。当这些区块链加入SCALE计划时,Chainlink会获得部分赠款,以支付链上Gas费用。
  • Stake:给普通用户开的质押口子可以不说,重点可以看下为了维护协议安全搞的“超线性质押”
  • 混合型智能合约: 轻松接入任何所需的链下资源,提升隐私保障,用户可自行选择区块链或layer 2网络。
  • 更强大的Chainlink预言机数据: 提高更新频率、提供隐私保护查询并实现多链数据传输。所有功能的使用成本都相较之前更低,为高杠杆衍生品协议和企业解决方案等DeFi应用接入更安全可靠的链下数据源。OCR功能的发布已经提升了Chainlink预言机数据的可扩展性
  • 更强大的Chainlink VRF
  • Chainlink Automation:以去中心化和可靠的方式自动维护关键的智能合约功能,比如触发止盈或清算
  • Chainlink去中心化身份认证: 具有隐私保护功能的预言机协议与现有系统向后兼容,开启链上信贷等全新应用场景。
  • 代币经济升级:前两天总算有消息要上线了。主要包括三个方面:
图片来源:https://blog.chain.link/explicit-staking-in-chainlink-2-0/
  • 首先,白皮书中提出了一种双层预言机网络。第一层由质押LINK代币的节点组成,负责定期生成预言机报告;第二层则为仲裁层,由Chainlink连接的应用程序的核心开发团队和管理这些应用程序的DAO组成。当出现争议时,会触发看门狗机制,需要仲裁层介入,一层恶意节点质押的代币会被没收,奖励给触发看门狗机制的节点。
  • 假设第一层有n个节点,每个节点质押的LINK代币数量为d,总质押量为nd,恶意节点总共质押量最少为nd/2。若故意作恶,被罚没的数量也至少为nd/2。由于任何节点都可以成为看门狗,在触发警报后获得所有奖励,那么每个节点都需要受贿nd/2数量的代币才会不发出警报,因此攻击者破坏第一层DON所需预算至少为dn²/2,是节点数量的二次方。

但是这种设计天然将节点分为T1 T2,那么会出现以下潜在风险:

  • 解决女巫攻击的方法来源于tier2节点, 如果tier2 node被劫持,则可以劫持整个网络
  • tier2与tie1存在利益冲突。如果tier2节点反叛,则可以直接通过对tier1节点的报错,赚取tier1节点信用质押金Links
  • 虽然有个t2仲裁层解决争端。但是裁决层本身有基于利益存在欺诈的可能性。本质实际上仍以中心化的方式去解决去中心化的安全问题(API3 提出DAO的解决方案)

Chainlink — — 事实优于信任

有的项目,从第一版白皮书就能看出来这项目一定可以。Chainlink和Uni就属于这类项目。他们的一大共同特点就是和BTC非常相似,简单优雅的利用区块链解决一个具体的刚需问题。

我们知道,在BTC出现之前,我们的世界都是基于纸面承诺或者权威认证的方式运行的。区块链技术的出现,给了我们一个全新的可信中立&可信执行的武器 — — 不可篡改的加密事实。加密事实通过密码学、加密技术、数学和物理学严格保障了结果执行。这代表着我们的协议可以按照既定方式执行,并且确保出现符合预期的行为,以及该行为会产生符合数理规律的结果。

而Chainlink一直所秉持的就是“事实优于信任”的基本信念,致力于将世界建立在事实真相的基础上。将一切都与事实联系起来,从根本上消除对真相的分歧,社会就能逐步摆脱“纸面承诺”的危机,为发达市场带来更多的公平性。尽管争议一直存在,但是个人依然相信Chainlink依旧能做到最好。

最后,如果大家对于chainlink具体可以做的事情还不清楚,非常推荐一篇他们官方写过的经典Blog《77+ Smart Contract Use Cases Enabled By Chainlink》。

文献参考

https://research.chain.link/whitepaper-v1-chinese.pdf

https://blog.chain.link/chainlink-vrf-on-chain-verifiable-randomness-zh/

https://blog.chain.link/sergey-nazarov-smartcon-keynote-the-future-of-hybrid-smart-contracts-zh/

https://blog.chain.link/chainlink-2-0-lays-foundation-for-adoption-of-hybrid-smart-contracts-zh/

https://www.panewslab.com/zh/articledetails/rx8tp00nc4qa.html

https://www.panewslab.com/zh/articledetails/p26fyffw.html

SUPPORT US:

http://giveth.io/project/cyc

--

--

Distributed blockchain research institution. Focusing on underlying technology research and practice. Support us: http://giveth.io/project/cyc

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
CYC

Distributed blockchain research institution. Focusing on underlying technology research and practice. Support us: http://giveth.io/project/cyc