ChainLink原理

1 ChainLink简介

1.1 区块链是确定性的

区块链是一个交易驱动的状态机(a transaction-based state machine),它能做的事情就是通过向区块链提交事务/交易(transaction),来将区块链从一个状态转变成另一个状态。简单来说就是:区块链没有主动获取数据的能力,它能用的只有区块链自己本身的数据。数据的缺失导致智能合约的应用范围非常少,目前大部分的应用都是围绕着token来展开的。

区块链的确定性意味着:在任何节点上,只要连入到区块链的分布式网络中,它就可以同步所有的历史区块,回放出一套完全相同的账本。换句话说:在没有互联网连接的情况下,给定完整的块,节点必须能够从头开始重新创建区块链的最终状态。如果账本在形成过程中,依赖于某个外部的API调用结果,那在不同时间不同环境下回放的结果就会不一样,这种情况是区块链所不允许的,所以区块链在设计之初就没有网络调用。

1.2 预言机(Oracle)

在区块链领域,预言机(Oracle)被认为是可以为智能合约提供外部数据源的系统。从传统技术架构方面来看,预言机是连接智能合约与区块链外部世界的中间件,是区块链重要的基础设施,它的作用是为区块链上的智能合约提供数据信息的。

Chainlink是一个去中心化的预言机项目,它的作用就是以最安全的方式向区块链提供现实世界中产生的数据。Chainlink围绕LINK token通过经济激励建立了一个良性循环的生态系统。Chainlink预言机需要通过LINK token的转账来实现触发。

2 预言机安全性

2.1 瑞士奶酪模型

在现实世界中解决信任问题一般是使用多个保护层:合约、可信赖的公司、保险、法律等等,只要至少还有一个保护层没有失灵,就可以认为系统依然是诚实的,然而如果所有的保护层都被腐化堕落了,那攻击就生效了,就类似下面的瑞士奶酪模型,比较典型的事件例如:2008年对次贷评级的场景。
ChainLink原理_第1张图片

2.2 多重屏障模型

世上没有完美的系统,预言机一般都是借鉴现实世界中的多重屏障的思路去尽可能提高可行度。

2.2.1 多重数据源

减少数据失误的最简单办法是用预言机把多重数据源聚合起来;这样只有两种可能收集到离谱的数据:一是大部分数据源都腐化了,二是预言机本身被攻破了(变成了一个单点故障问题)。

2.2.2 容错算法

保证整个集群中大部分预言机是正常节点,通过算法的手段即可确保集群数据可靠性。采用实用拜占庭容错算法(PBFT)时,只要满足n>3f(n表示总节点数目,f表示恶意或无效节点数目)即可保证集群达数据安全可靠。其实目前大量区块链应用都采用实用拜占庭容错算法(PBFT),来保证数据可靠性。
基于这个算法可以得出两个结论:

增加预言机节点数量,增加腐化节点的成本。让10个节点同时作恶的成本远比让1个节点作恶成本高很多。
保证所有节点都可靠非常难,但是保证集群中可靠节点占到一定的比例还是比较简单,可操作的。

2.2.3 激励机制

去中心化网络可以制定特定的激励机制,以保证网络参与者的行事准则和网络的整体利益一致。当网络参与者按照规则活动时就能获得奖励,比如说矿工挖矿可以得到区块奖励,权益证明系统需要罚没条件来抵御女巫攻击和无利害关系攻击。这其实是目前绝大多数区块链应用都采用的一种手段。

2.2.4 可信执行环境

用专门的硬件环境来执行,增大作恶难度。

3 ChinaLink架构

3.1 连通链上链下

Chainlink的目标是构建一个完全去中心化的预言机网络;其主要的想法是为预言机打造一个可信的市场,有良好行为的预言机节点会受到激励,其表现和声誉会公之于众,反之有恶意行为的节点会受到惩罚。

ChinaLink的核心目标是连通链上、链下数据;用ChinaLink官网上的说法是:
智能合约本质上是与世隔绝的:

区块链是非常安全可靠的价值交换网络,但却无法安全防篡改地获取链下数据或将数据发送至链下系统。

Chainlink将智能合约与现实世界相连:

Chainlink预言机将智能合约连接至链下数据、事件、支付等,并保障防篡改性和可靠性,这极大扩展了区块链的功能。

如下图所示:
ChainLink原理_第2张图片

3.2 预言机模型

一个抽象预言机的模型如下所示:
ChainLink原理_第3张图片

如图所示,一个预言机应该包括以下几个步骤:

  • 1)接受数据请求:从智能合约USER-SC获得数据请求Req=(Src, t, q),明确目标数据源Src、时间或时间范围t、以及请求q;
  • 2)获取数据:将请求q在时间t发送至Src;
  • 3)返回结果:收到返回的数据a,将a返回至智能合约。
    除此之外,为了保护数据请求的隐私,在解密数据时ORACLE除了数据源Src以外绝对不会使用或向任何一方披露数据内容。

3.3 工作流程

预言机的三种设计模式:

  • 立即读取(immediate-read)
  • 发布/订阅(publish–subscribe)
  • 请求/响应(request–response)

ChainLink采用的是请求/响应模式,工作流程如下所示:ChainLink原理_第4张图片

具体过程为:

  • 1)USER-SC发起链上请求;
  • 2)CHAINLINK-SC为预言机记录事件;
  • 3)Chainlink核心软件收到事件记录并向适配器发送任务;
  • 4)Chainlink适配器执行任务,向外部API请求数据;
  • 5)Chainlink适配器处理返回数据并返回至核心软件;
  • 6)Chainlink 核心软件将数据传回CHAINLINK-SC;
  • 7)CHAINLINK-SC 将数据聚合成单一数据,并返回至USER-SC。

名词解释:

  • USER-SC:Chainlink节点作为预言机,针对由智能合约端亲自发起的或第三方委托发起的数
    据请求返回结果,我们将这类数据请求称为“请求合约”,并用USER-SC表示。
  • CHAINLINK-SC:Chainlink与USER-SC(请求合约)交互的接口本身也是一个链上合约,我们用CHAINLINK-SC表示。

如果更细节一些,到api调用层面,那么如下图所示:
ChainLink原理_第5张图片

注:此图来源于:Chainlink 预言机基本原理

3.4 可靠性

为了提升ChinaLink的可靠性,采用了三种互补的方式:分散数据来源、分布式预言机、使用可信硬件。
注:这里仅简单介绍,更多信息可以参考《ChainLink白皮书》

3.4.1 分散数据来源

对于单数据源数据可能出错,简单的处理方式是获取来自多个源的数据。可信的ORACLE可以查询一系列的数据源{Src1, Src2, …, Srcn},从而获得一系列的响应{A1, A2, …, An},将以上响应集合作为一个单一的答案返回,result=agg(A1, A2, …, An)。
这里列几种场景的场景:

  • 对于多数投票制,如果大多数返回了相同的结果a,那么result=a
  • 对于平均值场景,可能会踢出一个最大值、最小值,result=剩余数据的平均数。

3.4.2 分布式预言机

正如数据源可以被分散一样,理想的预言机本身也应该是一个(近似的)分布式系统,也就是说,我们可以有n个不同的预言机节点{O1, O2, …, On}来代替单一的预言机节点。模型如下所示:
ChainLink原理_第6张图片

3.4.2.1 初始方案:链上聚合

Chainlink最初提出的解决方案是简单的“合约内聚合”模式。CHAINLINK-SC将调用Agg函数计算A=Agg(A1,A2,…An),并将结果A返回至USER-SC。
这个方法在n值较小的情况下很实用,而且有几大优势:

  • 简单:尽管预言机是分散的,但HAINLINK-SC可以通过执行Agg将数据聚合.
  • 可信度高:CHAINLINK-SC的代码公开可见,并且其正确的行为将可以被验证;另外,CHAINLINK-SC执行链完全可见。
  • 非常灵活:CHAINLINK-SC可以实现收欢迎的聚合功能,例如平均值、多数决定等。

缺点:成本高

3.4.2.2 中期方案:链下聚合

Chainlink提议采用基于门限签名的简单协议。现存许多签名机制都可以实现这一功能,但使用Schnorr签名机制是其中最简单的方案。用Schnorr签名机制,预言机拥有一个公钥集合pk和对应的私钥集合sk,以(t,n)门限的方式分配给 O1,O2…,On[3]。这里分配是指每个节点Oi都有一对专属的私钥和公钥(ski,pki)。Oi可以生成部分签名σi =Sigski[Ai],可以用pki进行验证。

这个方案最大的特点是,t台预言机的集合针对同一个值A分别生成部分签名,这些签名被聚合成一个完整的合法签名Σ=Sigsk[A]。然而,t-1台预言机的集合就无法针对任何值生成合法签名。因此这个完整签名Σ至少由t台预言机的部分签名组成。门限签名只需让Σ包含t个来自不同节点的独立合法签名即可。门限签名在安全性上与这个方案无异,但它却能大幅提升链上性能,因为它可以将验证Σ的工作量和成本降低t倍。
ChainLink原理_第7张图片

3.4.3 可信硬件

ChainLink正在积极研究使用可信硬件,不过光靠可信硬件可能无法提供充分的安全保障。

  • Chainlink最初开发的网络中不会部署可信硬件。
  • 一些用户不相信可信硬件。
  • 可信硬件只能规避节点违规操作风险,而无法规避节点宕机风险。

Chainlink开发了四大安全服务,即:验证系统、声誉系统、认证服务和合约升级服务。

3.4.3.1 验证系统

负责监控链上预言机行为,提供客观的性能指标,为用户选择预言机提供指导意见。它会对预言机在以下两个方面进行监控:

  • 可用性:验证系统应记录预言机失效,以及时响应数据请求。它将持续汇总运行时间内的统计数据。
  • 准确性:验证系统应衡量预言机反馈结果与网络中其他预言机之间的偏差程度,并记录明显错误的反馈结果。
3.4.3.2 声誉系统

声誉系统将记录预言机服务商以及节点的用户评分,让用户可以评估预言机的历史服务水平。验证系统的报告可能成为决定预言机声誉的主要因素,并确保声誉数据真实可信。而链上服务记录之外的其他因素则可揭示预言机节点本身的安全水平。

3.4.3.3 认证服务

Chainlink的验证和声誉系统旨在解决一系列预言机违规操作的行为,在多数情况下保障系统完整性。另外,我们在此基础上还添加了一层认证服务,目的是避免重大问题的发生,并在问题发生时进行补救,特别是由于女巫攻击和镜像攻击导致整个区块沦陷的情况。

3.4.3.4 合约升级服务

光靠代码几乎无法让智能合约在安全性上做到滴水不漏,即使智能合约的代码完全没有问题,它所部署的环境一旦出现变化或错误,仍然会对合约安全造成严重影响。
短期内,如果发现了风险漏洞,合约升级服务将在Chainlink预言机中创建一套新的预言机合约。新的数据请求合约将迁移到新的预言机合约集合中。

4 LINK代币

Link是ChainLink网络的主网资产,该令牌将用于支付节点运营商的服务费用。
以太坊等网络中的智能合约如果要使用Chainlink节点,就需要使用LINK付款给为它们提供服务的Chainlink节点,节点根据用户对它们服务的需求量以及其他类似数据源的供应量来定价。LINK是ERC20通证,
附带ERC223“转账加调用”功能(address,uint256,bytes),合约可以在单笔交易内收到并处理通证

5 参考文档

ChainLink白皮书

Chainlink 预言机基本原理

Chainlink的网络效应为每个人创建了更安全更低成本的预言机

什么是ChainLink (LINK)

什么是ChainLink (LINK)

Chainlink拥有哪些独一无二的优势?

随机数奖励会对区块链游戏产生哪些经济价值

Chainlink与DeFi生态系统深度融合

Chainlink 可验证随机函数详解

全面概述去中心化预言机

Chainlink 与 NEST 预言机链上数据分析

Chainlink、NEST、MakerDAO 预言机综合对比

为什么 LINK 使用 ERC-677 标准发行 token

你可能感兴趣的:(区块链,ChainLink,LINK,DeFi,区块链)