区块链是一个交易驱动的状态机(a transaction-based state machine),它能做的事情就是通过向区块链提交事务/交易(transaction),来将区块链从一个状态转变成另一个状态。简单来说就是:区块链没有主动获取数据的能力,它能用的只有区块链自己本身的数据。数据的缺失导致智能合约的应用范围非常少,目前大部分的应用都是围绕着token来展开的。
区块链的确定性意味着:在任何节点上,只要连入到区块链的分布式网络中,它就可以同步所有的历史区块,回放出一套完全相同的账本。换句话说:在没有互联网连接的情况下,给定完整的块,节点必须能够从头开始重新创建区块链的最终状态。如果账本在形成过程中,依赖于某个外部的API调用结果,那在不同时间不同环境下回放的结果就会不一样,这种情况是区块链所不允许的,所以区块链在设计之初就没有网络调用。
在区块链领域,预言机(Oracle)被认为是可以为智能合约提供外部数据源的系统。从传统技术架构方面来看,预言机是连接智能合约与区块链外部世界的中间件,是区块链重要的基础设施,它的作用是为区块链上的智能合约提供数据信息的。
Chainlink是一个去中心化的预言机项目,它的作用就是以最安全的方式向区块链提供现实世界中产生的数据。Chainlink围绕LINK token通过经济激励建立了一个良性循环的生态系统。Chainlink预言机需要通过LINK token的转账来实现触发。
在现实世界中解决信任问题一般是使用多个保护层:合约、可信赖的公司、保险、法律等等,只要至少还有一个保护层没有失灵,就可以认为系统依然是诚实的,然而如果所有的保护层都被腐化堕落了,那攻击就生效了,就类似下面的瑞士奶酪模型,比较典型的事件例如:2008年对次贷评级的场景。
世上没有完美的系统,预言机一般都是借鉴现实世界中的多重屏障的思路去尽可能提高可行度。
减少数据失误的最简单办法是用预言机把多重数据源聚合起来;这样只有两种可能收集到离谱的数据:一是大部分数据源都腐化了,二是预言机本身被攻破了(变成了一个单点故障问题)。
保证整个集群中大部分预言机是正常节点,通过算法的手段即可确保集群数据可靠性。采用实用拜占庭容错算法(PBFT)时,只要满足n>3f(n表示总节点数目,f表示恶意或无效节点数目)即可保证集群达数据安全可靠。其实目前大量区块链应用都采用实用拜占庭容错算法(PBFT),来保证数据可靠性。
基于这个算法可以得出两个结论:
增加预言机节点数量,增加腐化节点的成本。让10个节点同时作恶的成本远比让1个节点作恶成本高很多。
保证所有节点都可靠非常难,但是保证集群中可靠节点占到一定的比例还是比较简单,可操作的。
去中心化网络可以制定特定的激励机制,以保证网络参与者的行事准则和网络的整体利益一致。当网络参与者按照规则活动时就能获得奖励,比如说矿工挖矿可以得到区块奖励,权益证明系统需要罚没条件来抵御女巫攻击和无利害关系攻击。这其实是目前绝大多数区块链应用都采用的一种手段。
用专门的硬件环境来执行,增大作恶难度。
Chainlink的目标是构建一个完全去中心化的预言机网络;其主要的想法是为预言机打造一个可信的市场,有良好行为的预言机节点会受到激励,其表现和声誉会公之于众,反之有恶意行为的节点会受到惩罚。
ChinaLink的核心目标是连通链上、链下数据;用ChinaLink官网上的说法是:
智能合约本质上是与世隔绝的:
区块链是非常安全可靠的价值交换网络,但却无法安全防篡改地获取链下数据或将数据发送至链下系统。
Chainlink将智能合约与现实世界相连:
Chainlink预言机将智能合约连接至链下数据、事件、支付等,并保障防篡改性和可靠性,这极大扩展了区块链的功能。
如图所示,一个预言机应该包括以下几个步骤:
预言机的三种设计模式:
ChainLink采用的是请求/响应模式,工作流程如下所示:
具体过程为:
名词解释:
注:此图来源于:Chainlink 预言机基本原理
为了提升ChinaLink的可靠性,采用了三种互补的方式:分散数据来源、分布式预言机、使用可信硬件。
注:这里仅简单介绍,更多信息可以参考《ChainLink白皮书》
对于单数据源数据可能出错,简单的处理方式是获取来自多个源的数据。可信的ORACLE可以查询一系列的数据源{Src1, Src2, …, Srcn},从而获得一系列的响应{A1, A2, …, An},将以上响应集合作为一个单一的答案返回,result=agg(A1, A2, …, An)。
这里列几种场景的场景:
正如数据源可以被分散一样,理想的预言机本身也应该是一个(近似的)分布式系统,也就是说,我们可以有n个不同的预言机节点{O1, O2, …, On}来代替单一的预言机节点。模型如下所示:
Chainlink最初提出的解决方案是简单的“合约内聚合”模式。CHAINLINK-SC将调用Agg函数计算A=Agg(A1,A2,…An),并将结果A返回至USER-SC。
这个方法在n值较小的情况下很实用,而且有几大优势:
缺点:成本高
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正在积极研究使用可信硬件,不过光靠可信硬件可能无法提供充分的安全保障。
Chainlink开发了四大安全服务,即:验证系统、声誉系统、认证服务和合约升级服务。
负责监控链上预言机行为,提供客观的性能指标,为用户选择预言机提供指导意见。它会对预言机在以下两个方面进行监控:
声誉系统将记录预言机服务商以及节点的用户评分,让用户可以评估预言机的历史服务水平。验证系统的报告可能成为决定预言机声誉的主要因素,并确保声誉数据真实可信。而链上服务记录之外的其他因素则可揭示预言机节点本身的安全水平。
Chainlink的验证和声誉系统旨在解决一系列预言机违规操作的行为,在多数情况下保障系统完整性。另外,我们在此基础上还添加了一层认证服务,目的是避免重大问题的发生,并在问题发生时进行补救,特别是由于女巫攻击和镜像攻击导致整个区块沦陷的情况。
光靠代码几乎无法让智能合约在安全性上做到滴水不漏,即使智能合约的代码完全没有问题,它所部署的环境一旦出现变化或错误,仍然会对合约安全造成严重影响。
短期内,如果发现了风险漏洞,合约升级服务将在Chainlink预言机中创建一套新的预言机合约。新的数据请求合约将迁移到新的预言机合约集合中。
Link是ChainLink网络的主网资产,该令牌将用于支付节点运营商的服务费用。
以太坊等网络中的智能合约如果要使用Chainlink节点,就需要使用LINK付款给为它们提供服务的Chainlink节点,节点根据用户对它们服务的需求量以及其他类似数据源的供应量来定价。LINK是ERC20通证,
附带ERC223“转账加调用”功能(address,uint256,bytes),合约可以在单笔交易内收到并处理通证
ChainLink白皮书
Chainlink 预言机基本原理
Chainlink的网络效应为每个人创建了更安全更低成本的预言机
什么是ChainLink (LINK)
什么是ChainLink (LINK)
Chainlink拥有哪些独一无二的优势?
随机数奖励会对区块链游戏产生哪些经济价值
Chainlink与DeFi生态系统深度融合
Chainlink 可验证随机函数详解
全面概述去中心化预言机
Chainlink 与 NEST 预言机链上数据分析
Chainlink、NEST、MakerDAO 预言机综合对比
为什么 LINK 使用 ERC-677 标准发行 token