中间件和API的作用

Posted chainlink官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了中间件和API的作用相关的知识,希望对你有一定的参考价值。

Chainlink为智能合约提供中间件,通过API与外部资源连接。 为了能充分理解这其中的奥义,我们先来解释一下中间件和API的定义,然后再探讨如何在Chainlink网络中加以利用。



中间件是什么? 



中间件是让两个软件实现交互的计算机软件。 开发者无须花费大量人力物力让两种不同的系统软件兼容,而是可以使用现成的中间件快速连接两个系统。 这就好比两家在不同城市的企业利用高速公路等现有基础设施相互运输货物,而无须重新建设自己的高速公路。



API是什么? 



如今最常见的中间件是应用程序接口(API)。 API以明确的方式与某一系统进行交互,无须了解该系统的任何实现细节。 企业通常会开发自己的API,让其他应用利用它们的服务和数据。 举个例子,百度向其他应用软件开放API以出售GPS数据。


开发者利用API可以更快地开发出成本低廉的应用软件,而无须事事亲力亲为。 比如主流打车软件滴滴在软件开发中使用了GPS API(定位),短信API(信息)和支付API,而不是自主开发每一个功能。



Chainlink-API中间件将智能合约连接到链下世界



Chainlink提供基础的中间件,将智能合约连接到原生区块链以外的(链下)API。 这样一来,智能合约可以就使用外部数据API触发合约执行,并向外部系统API发送数据进行结算。


以下是几个应用场景:

· 航班保险智能合约连接到一个可信网站API(OAG)获取数据,以判断航班是否取消或延误。如果航班延误,智能合约将连接至一个外部支付系统API(支付宝)以当地货币(人民币)结算。


· 货物付款智能合约连接GPS API获取定位数据,连接海关API确定货物是否已经清关,连接物联网API确保运输中的质量控制(集装箱门是否锁住,运输过程中货物是否一直保存在适当的温度下等)。一旦所有数据传输到智能合约并且经过确认,智能合约就会被连接到支付系统API以任意货币进行结算。


除此之外还有许多其他应用场景,而在每一个应用场景中,Chainlink都提供了稳健的平台,让智能合约能通过API连接到任何数据点或系统。 此类中间件大幅提高了开发者开发应用的便利性,因为他们不需要费时费力重新开发与外部世界连接的基础架构。 我们相信Chainlink中间件是推动智能合约在现实世界中广泛应用的关键一环。

链下架构

Chainlink 的链下架构最初包括以太坊上的预言机节点网络,我们最终希望能支持 所有领先的智能合约网络。这些独立节点获取链下数据,下文中我们将详细阐述如何在 几个可行的共识机制中选择一个将所有节点的返回结果聚合成单一数据,并返回至请求 合约 USER-SC。Chainlink 节点实现了标准开源的核心功能,其中包括标准化的区块链 交互、调度以及连接共同的链下资源。节点运营商可以选择添加软件扩展包,即外部适 配器,以提供专业的链下服务。Chainlink 节点已被部署到了公链和企业联盟链。让节 点实现去中心化运营是 Chainlink 网络不断前进的动力。

Chainlink 核心软件

节点的核心软件负责与区块链交互、调度任务并平衡各个外部服务的工作量。

Chainlink节点完成的工作被称为任务(” assignment)。每个任务都可分成更小的单位, 即子任务(subtask),子任务以流水线的方式进行。每个子任务都有具体的职责,前 一个子任务完成工作后会将结果传递给下一个子任务,并得出最终结果。Chainlink 节 点软件内置了几个子任务,其中包括 HTTP 请求、JSON 解析以及转换成不同的区块链 格式。

外部适配器

除了内置子任务外,还可以通过创建适配器定制子任务。适配器是配置了最小化 REST API 的外部服务。配置了服务型适配器后,任何编程语言开发的程序都可以通过 加上一个中间 API 而轻松实现。同样地,与复杂的分步 API 交互也可以得到简化,通 过多个参数化的子任务来实现。

子任务模式

我们预期会出现许多开源的适配器,因此服务可以由各个社区成员负责运营和审计。由于开发者开发出了许多不同的适配器,因此保障适配器之间互相兼容至关重要。

Chainlink 目前基于 JSON 格式[36]运行,规范每个适配器需要什么数据输入,以 及应该如何格式化。同样地,适配器也会明确数据输出格式以及每个子任务的数据输出 格式。

数据上报 一旦生成了新的预言机记录,链下预言机就会开始执行合约并将数据发送至链上。

数据聚合

一旦预言机将返回结果上传至预言机合约,这些数据将被传输至聚合合约。聚合合 约收集所有预言机返回的结果,并计算出一个加权数值。每台预言机返回的数据质量都 将被发送到声誉合约中。最后,加权数值将被发送至 USER-SC 具体的合约函数中。


智能合约将替代传统法律合约和自动执行的中心化数字合约,颠覆众 多行业。在传统模式中,合约一方通常需要手动验证并执行合约;抑或依 靠程序自动获取并更新信息。然而,由于区块链具有特殊的底层共识协议, 链上智能合约无法与外部系统交互。

如今出现了一种新的解决方案,即“预言机”。预言机可将链上智能合约 连接至链下世界。现存的预言机都采用中心化的服务模式,使用该服务的 智能合约可建立单点失效机制,使其相较传统的中心化数字合约具有更高 的安全性。


Chainlink正在开发世界上首个去中心化预言机网络。该网络是一个综合平台,为开发者提供全面的工具和数据,帮助其在任意平台上开发出各种类别的智能合约预言机。Chainlink既是预言机,又是灵活的框架,为智能合约开发者提供安全可靠的预言机解决方案。

Chainlink预言机(节点)能够格式化信息并验证数据,让智能合约安全可靠地连接到各种链下资源,包括数据提供商、web API、企业系统、云平台、物联网设备以及支付系统等

Chainlink拥有独一无二的能力,可以将预言机和数据源都去中心化。

去中心化的预言机网络能让开发者在智能合约中选择任意数量的预言机。使用多个预言机不仅能防止单个预言机宕机对整个系统造成的影响,而且还能防止单个预言机遭到黑客攻击、被收买或者出现问题的现象。Chainlink最近在门限签名领域实现了突破,门限签名技术让智能合约可以同时使用多个预言机,但只需支付链上费用。这项技术史无前例地大幅降低了去中心化预言机的使用成本。

将数据源去中心化让预言机能够从多个来源采集数据,并将数据整合至单一数据点,并且触发智能合约。由于数据存在多个来源,智能合约就能够避免单一数据源出现误差。Chainlink支持多种数据聚合模式,比如取平均值和/或去除异常值。

Chainlink另一个特色就是其信誉系统。与阿里巴巴和滴滴平台中卖家和司机的信誉系统类似,Chainlink也为预言机开发了一套信誉系统。声誉由各种衡量指标构成,其中包括运行时间、响应时间以及成功完成的任务。智能合约的数据请求方可以根据预言机评分来选择,或者也可随机选择。这个信誉系统不仅为开发者提供了可靠的参考指标,还约束了各个节点为其提供的服务负责。

另外,Chainlink还针对智能合约的具体需求提供不同程度的安全保障。除了标准化预言机之外,Chainlink另外一个主推的解决方案就是在可信执行环境(TEE)中使用可信硬件(比如英特尔的SGX)运行预言机。预言机在可信执行环境中运行的主要优势是节点无法看到数据请求的具体内容,比如传输至智能合约或从智能合约输出的数据以及数据请求方的具体信息。可信执行环境是一个颇具吸引力的技术,因为它可以安全地处理密码和私钥等私密信息,并保障信息绝对不会泄露给节点或其他人,同时还能证明数据未经篡改。可信执行环境还可以实现智能合约链下计算,因此可以降低gas费用并提高可扩展性。

最后,Chainlink还建立了保证金惩罚制度,激励节点诚实守信。在中心化的预言机模式中,用户可以约束私营企业的行为。而为了要约束节点的行为,那就需要建立一定的保险机制。节点必须预存一定数额的LINK代币作为保证金,才能有机会接收处理某一个数据请求。如果该节点的数据被发现是异常数据,那么其保证金将被没收并退还给数据请求方作为补偿。Chainlink采用博弈论的原理激励节点提供准确的数据,否则节点就将受到罚款。

智能合约如果要获得大规模应用,必须保障安全性和可靠性,而且必须能够与外部世界联通。因此Chainlink正致力于开发去中心化的开源协议,让智能合约开发者在连接链下数据和系统的同时能够选择并控制去中心化和保密的程度。


Chainlink想要解决如何以安全、可信以及去中心化的方式实现数据上链。

在2018年末漫长而艰苦的加密货币冬季期间,许多区块链项目在那个艰难时期崩溃或死亡倒闭,但在这整个期间,Chainlink设法保持了增长甚至抵制了看跌的市场。当大多数加密市场崩溃并停滞不前时,Chainlink如何实现增长?我们一起找出答案吧!

出现背景

区块链之所以出色且受到很多追捧,是因为它们使用数学和密码学来切实保证区块链上面的信息的安全性,可信性和去中心化。然而将信息从区块链外面的世界上传到区块链上是有问题的,因为你要信任上传的信息可靠真实。检索有关事件结果或比特币价格之类的信息意味着必须信任消息来源说实话,而没有作弊。之前还没有解决方案,而现在有了,这就是Chainlink要做的事情。

Chainlink是什么?

Chainlink解决了如何以仍然安全,可信赖和去中心化的方式将信息存储在区块链上的问题。区块链和称为“ oracle”的“真实”世界之间的数据源不再成为智能合约程序的单点故障。Chainlink创建了一个节点网络,以提供往返于区块链的信息,因此这创建了至关重要的智能合约的基础架构。这种“区块链中间件”意味着Chainlink oracle可以在不牺牲去中心化和安全性的前提下,提供诸如价格,事件结果以及与传统支付系统的链接之类的基本链下信息。

ChainLink的发起人

Chainlink由现任首席执行官Sergey Nazarov和现任首席技术官Steve Ellis发起创立。

发展历史

2017年9月– Chainlink在初始代币发行中发行了10亿个LINK代币,共筹集了3200万美元;2018年11月– Chainlink收购TownCrier;2019年5月– Chainlink在以太坊主网上启动。

Chainlink的特殊之处

在Chainlink创建链下数据和链上数据的桥梁之前,去中心化应用程序(dapps)中的巨大漏洞是区块链遇到外部世界信息的地方,数据进入区块链的地方是可以被操纵的——这些失败点是Chainlink创造价值的地方。

为了最大程度地降低oracle的潜在故障,他们在白皮书中优先考虑了以下三个原则:

(1)数据源的分发;

(2)oracle的发行;

(3)使用可信硬件”

为了提高Oracle或数据源的安全性,Chainlink收购了一家名为TownCrier的初创公司。通过使用TownCrier的技术,使用“受信任的执行环境”和专用的额外安全硬件,提供给Chainlink oracle的数据将变得更加安全和可信。

Chainlink的牛逼之处和用途通过其众多合作伙伴得以证明,例如来自加密世界的Polkadot(波卡)和Synthetix以及来自传统商业世界的SWIFT和Google。

例如,可以通过Chainlink将真实的资金转账从SWIFT发送到区块链中,然后可以通过Chainlink将收到的付款证明发送回SWIFT。SWIFT使用Chainlink可以在传统世界和加密世界之间实现无缝交互,同时最大程度地减少潜在的故障点。

Chainlink的工作原理

Chainlink是一个去中心化的oracle网络,由数据的购买者和提供者组成。购买者请求数据,提供者以安全可信的方式返回数据。

购买者选择他们想要的数据,供应商竞标提供这些数据。供应商在出价时必须质押一部分LINK代币,如果行为不当,可以将其扣除。一旦选择了提供者,他们的工作就是在链上提供正确的信息数据。

Chainlink使用Oracle信誉系统对提供的数据进行汇总和加权,如果一切顺利,提供商将获得报酬,每个人都会感到高兴。

你如何持有Link(ChainLink)代币?

Chainlink网络使用ERC677标准,该代币继承了ERC-20代币标准的功能,并允许代币传输包含数据,它也用于支付数据提供者的费用,这些数据提供者将数据传输进区块链中,并由数据购买者支付。他们的服务价格由数据提供者或Oracle在出价时确定。

你能通过ChainLink做什么?

尽管Chainlink是从以太坊开始运行的,但他们的Oracle服务也可以在其他区块链上使用,例如比特币和Hyperledger,独立开发人员和大型公司都可以作为节点操作员将数据出售给Chainlink网络,并在此过程中获得LINK代币的费用。

前景

确保Chainlink网络安全的两个关键目标是数据源和Oracle的去中心化,像所有网络一样,Chainlink希望增加更多的人员和运营商,以使其变得更强大,更有价值,从而增加其网络影响。这不仅意味着寻求更多的合作伙伴关系,还意味着可以通过其新的Chainlink社区倡导者计划倡导更多的教育、活动和社区关系。

背景介绍

智能合约是在区块链等去中心化的基础架构中执行的应用,其具有防篡改性,即包 括合约创建者在内的任何一方都无法篡改代码或干预代码执行。一直以来,传统合约的 代码都是在中心化的系统中运行的,因此有权限的一方有可能将合约篡改、终止或甚至 删除。相比之下,智能合约可保障合约顺利执行,约束合约各方履行各自义务。这就建 立了一种全新且稳健的信任关系,无须依赖合约各方彼此间的信任。由于智能合约是自 动验证和执行的(注:即具有防篡改性,上文已解释过,这里不再赘述),因此可以很 好地执行并管理数字合约。

然而,随着智能合约这种新的信任模式的产生,出现了一个新的技术挑战,那就是 连接性。大多数有价值的[27]智能合约应用都需要获取来自关键数据源的链下数据,特 别是实时数据和 API 数据,这些数据都不保存在区块链上。由于区块链受自身特殊的共 识机制限制,因此无法直接获取这些关键的链下数据。

我们针对智能合约的连接性问题提出了一个解决方案,那就是安全的预言机网络 ChainlinkChainlink 与其他预言机解决方案的不同之处在于其网络是完全去中心化的。这种去中心化的模式极大降低了合约方彼此间的信任需求,将智能合约防篡改的特性扩 展到了数据从 API 端到智能合约端的整个传输过程。让智能合约具有外部连接性,意味 着其能够与链下资源交互,这是智能合约替代传统数字合约的先决条件。

如今,大部分传统的数字合约都使用外部数据验证履约情况,并将数据输出至外部 系统。如果要用智能合约代替这类传统的数字合约,则需要其数据输入和输出都具有极 高的确定性。以下是下一代智能合约及其数据需求的潜在案例:

债券、利率衍生品等各类证券智能合约可接入 API 获取市场价格和市场参考数据 (如:利率)。

保险智能合约可利用物联网数据进行调查取证,比如:在违约时仓库的磁铁门是否 锁上了?公司防火墙当时是否正常运行?你购买了航班保险的航班是否按时到达? 贸易金融智能合约可利用航运物流 GPS 数据、供应链 ERP 数据以及货物清关数

据,以确保合约执行。

上述几个案例中还存在一个常见问题,那就是智能合约无法将数据输出至链下系统。这通常需要将支付消息发送至传统的中心化基础架构,即银行、PayPal 等用户平常会 使用的链下系统。Chainlink 能够将智能合约数据安全传输至 API 和传统链下系统,因 此既可以保障智能合约的防篡改性,又可以实现外部连接性。

1. 如今,以太坊上智能合约的主要用途是通证管理,这也是大多数智能合约网络最常见的 功能。我们认为这种情况是由于预言机服务水平不足导致的,这也是 Chainlink 着重想要 解决的问题。

分布式数据源

应对单一数据源 Src 风险漏洞的一个简单方法就是改为从多个数据源获取数据,即 采用分布式的数据源模式。可信预言机 ORACLE 可以向 Src1,Src2,......,Src数据源集 合请求数据,获得 a1, a2,......a结果集合,并聚合成单一数据 A=agg(a1,a2,......,ak)。预 言机可以以各种方式来完成任务,比如多数投票。如果大多数数据源返回同一个值 a, 那么 agg 函数就返回 a;否则则返回错误。这样的话,如果大多数(即大于 k/2)的数 据源都能正常运行,那么 ORACLE 预言机将永远都能返回正确的值 a

还有许多其他的 agg 函数可以侦测错误数据或处理一段时间内的数据波动(比如: 股票价格),并取剩余数据的平均值。

当然,还有一种情况是不同数据源之间的错误是互相关联的,这就会削弱聚合数据 的确定性。如果网站 Src1=EchoEcho.com 从 Src2=TheHorseMouth.com 获取数据,那 么 Src的错误就会导致 Src也出现错误。此外,数据源之间还会出现更难以被察觉到 的关联性错误。Chainlink 致力于解决这类问题,对数据源的独立性进行映射和报告, 让预言机和用户可以轻松规避此类关联性错误。

分布式预言机

刚才说了分布式数据源,其实理想型预言机 ORACLE 本身也可以是一个分布式系 统。也就是说,网络中并非只有一个预言机节点 O,而是有 个不同的预言机节点 {O1,O2,......,On}。每个预言机 O都会有自己的数据源集合,不同预言机的数据源可能会 重叠也可能不会。O从各个数据源获取并聚合数据,并将自己的聚合数据 A发送至请 求 Req

其中一些预言机可能出现问题,因此所有预言机返回的数据 A1,A2,......An 需要以 可信的方式被聚合成一个单一且权威的值 A。但由于可能出现问题预言机,Chainlink 怎 么样聚合数据呢?

初步解决方案:合约内聚合

Chainlink 最初提出的解决方案是简单的合约内聚合模式。CHAINLINK-SC(注: 仍然指代 Chainlink 所有链上合约)自行聚合预言机返回的数据(注:事实上是 CHAINLINK-SC 调用聚合合约,但为了简化概念,我们假设一个完整的 Chainlink 合约 包含这两个模块)。也就是说,CHAINLINK-SC 将调用 Agg 函数计算 A= Agg(A1,A2,......An)(与上文提到的 agg 函数类似),并将结果 返回至 USER-SC

这个方法在 值较小的情况下很实用,而且有几大优势:
概念简单:虽然采用分布式预言机模型,但 CHAINLINK-SC 仍统一执行 Agg 函数

运算聚合数据。

可信度高:由于 CHAINLINK-SC 的代码是开源的,因此其正确行为可以得到验证 (注:CHAINLINK-SC 代码相对较少也比较简单)。另外,CHAINLINK-SC 的执 行在链上完全公开透明,因此用户(即 USER-SC 的创建者)可以对 CHAINLINK- SC 高度信任。

灵活性高:CHAINLINK-SC可以实现最优聚合函数Agg,这个函数可以是多数投票 制,也可以是取平均值等。

这个方案虽然很简单,但是却引出了一个值得深思的技术性问题,即吃空饷” (freeloading)。预言机 O通过作弊看到另一台预言机 O反馈的结果 Ai,然后决定抄 袭它的答案。这样一来,预言机 O就不用花钱向数据源请求数据,而数据源是按照请 求次数收费的。吃空饷现象会削弱数据源的多样性,也会打击预言机快速响应的积极性 (注:因为响应速度慢的预言机可以免费抄袭别人的答案),因此会影响整体安全性。

我们针对这个问题提出了一个广为人知的解决方案,那就是建立先提交后解密 (commit/reveal)的机制。在第一轮,预言机将结果以加密形式返回 CHAINLINK-SC, CHAINLINK-SC 收到合法数量的结果后,就会开启第二轮,预言机将在这一轮解密数 据。

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

链上协议可以用区块时间来实现同步协议。而 Chainlink 上的预言机节点由于从不 同数据源获取数据,响应时间可能会出现较大差异,而且由于节点在以太坊上使用的 gas 价格不同,取消提交时间也会有所不同。因此为了尽可能提高协议的响应速度,算 法 被设计成异步协议。

其中,Commitr(A)指代提交结果 A,目击者是 rSID 指代一组合法会话 ID(session id)。协议假设各方之间存在认证通道。

那么显而易见,算法 将成功完成运算。假设一共有 3f+1 个节点,最多 个节点 有问题,那么至少 2f+1 个节点将在第四步提交结果。在这些提交的结果中,最多有 个 数据会来自出问题的节点,因此至少 f+1 个数据会来自诚实的节点。所有被提交的结果 最终都会被取消。

另外,是算法 的正确答案。针对单一值 的 f+1 个提交取消中,至少有一个肯 定来自诚实节点。

调用算法 在合约中聚合数据将是 Chainlink 短期内主要采取的方案。初步的实现 方案将在这个算法基础上进一步优化并实现并发。我们的长期策略是开发一个更加复杂 的 OCA(即链下聚合)协议,具体算法是附件 中的算法 和算法 3OCA 是一种链 下聚合协议,可将链上交易成本降到最低。这个协议还包括向预言机节点付款的功能, 并确保抄袭者拿不到一分钱。

算法 1 InChainAgg({Oi}ni=1) (CHAINLINK-SC 代码) 1. 等待从 USER-SC 收到 Req
2. sid ←$ SID
3. 
广播(request,sid)

4. 等待从 O收到 2f+1 条信息的集合 C(commit,ci = Commitri (Ai),sid)
5. 
广播(committed,sid)
6. 
等待收到 f+1 个合法取消提交的集合 D; 集合中所有元素的值 A都等于某个值

A
7. 
(Answer, A, sid)发送至 USER-SC

中长期战略:链下聚合
合约内聚合存在一个关键问题,那就是成本。预言机 
O(n)提交的结果在链上处理(注:

指 A1,A2,......A的提交和解密)会产生费用。在联盟链中,这项开支是可以承受的。但在以太坊这样的公链上会收取链上交易费用,如果 值很大,那么费用将难以承受。一 种成本效益更高的方式是在链下聚合预言机提交的结果,并将最后聚合成的单一数据发 送至 CHAINLINK-SC。我们将这个方案称为链下聚合,这是我们的中长期战略。


在节点可能出现问题的情况下达成共识得出结果值A,这其实很接近区块链自身达 成共识的机制。假设有一组预先设定的预言机,一般人可能会考虑使用经典的拜占庭容 错(CFT)共识算法来计算结果 A。然而,经典的拜占庭容错协议的目标是最终所有诚 实节点都能储存同样的值,也就是说在区块链中,所有节点都储存同一个新产生的区块。而 Chainlink 的预言机目标则稍有不同。我们想要确保 CHAINLINK-SC(以及 USER- SC)能够获得聚合结果 A=Agg(A1,A2,......An),无须参与共识协议也无须从多台预言机 收到结果。另外,吃空饷的问题仍然需要解决。

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

这个方案最大的特点是,t 台预言机的集合针对同一个值 A 分别生成部分签名,这 些签名被聚合成一个完整的合法签名 Σ = Sigsk[A] 。然而,t-1 台预言机的集合就无法 针对任何值生成合法签名。因此这个完整签名 Σ 至少由 t 台预言机的部分签名组成。

门限签名只需让Σ包含t个来自不同节点的独立合法签名即可。门限签名在安全性 上与这个方案无异,但它却能大幅提升链上性能,因为它可以将验证 Σ 的工作量和成本 降低t倍。

也就是说,预言机只需要生成并广播部分签名,直到达到 t 个数量的部分签名,才 会开始计算 Σ。然而这个方案同样存在“吃空饷”的问题。因此我们必须保证预言机真实 地从数据源获取数据,而非从其他预言机抄袭 Ai。Chainlink 建立了一个经济机制来解 决这个问题,即通过 PROVIDER(智能合约)付款给真实获取了数据产生部分门限签 名的预言机。

在分布式结构中,很难决定应该付款给哪台预言机。预言机可能在链下互相沟通, CHAINLINK-SC 可能不再是唯一能收到反馈结果的权威性实体,因此无法直接在众多 预言机中判断出应该付款给谁。也就是说,PROVIDER 必须从预言机获得证据证明他 们是否违规操作,当然其中一些证据可能是不可信的。Chainlink 提出采用类似共识机 制的方案,避免 PROVIDER 错误地付款给抄袭的预言机。

附件 A 中详细阐述了 Chainlink 的链下聚合机制以及安全证明。它使用基于门限签 名的分布式协议,可以抵御 f < n/3 台预言机“吃空饷”的风险。我们相信这会是一个有潜 力的技术发展方向。

五.Chainlink 安全服务

Chainlink 基于上一章提到的多个协议,在网络中出现 f 个问题预言机的情况下仍 保障可用性和准确性。另外,我们正在积极研究使用可信硬件(注:第六章中将提到) 有效避免问题节点向智能合约提供错误数据。然而,光靠可信硬件可能无法提供充分的 安全保障,理由有三。首先,Chainlink 最初开发的网络中不会部署可信硬件。其次,一 些用户不相信可信硬件(注:请参见附件 B)。第三,可信硬件只能规避节点违规操作 风险,而无法规避节点宕机风险。因此,用户希望能够选择最可靠的预言机,并将 USER- SC 连接到>f 个问题节点的概率降到最低。

为了实现这个目标,Chainlink 开发了四大安全服务,即:验证系统、声誉系统、认 证服务和合约升级服务。所有这些服务一开始都由有意愿发布 Chainlink 网络的公司或 组织运行,但须严格遵照 Chainlink 去中心化的设计理念。Chainlink 的安全服务无法阻 止预言机节点参与或更改预言机反馈的结果。前三项服务仅为用户提供评分或指导意见, 而最后一项合约升级服务则完全由用户自行选择。另外,这些服务还可以支持独立的服 务提供商,Chainlink 鼓励独立服务提供商的参与,以便为用户提供更加丰富的安全服 务。

5.1 验证系统
Chainlink 的验证系统负责监控链上预言机行为,提供客观的性能指标,为用户选

择预言机提供指导意见。它会对预言机在以下两个方面进行监控:

l 可用性:验证系统应记录预言机失效,以及时响应数据请求。它将持续汇总运行时 间内的统计数据。

l 准确性:验证系统应衡量预言机反馈结果与网络中其他预言机之间的偏差程度,并 记录明显错误的反馈结果。3

Chainlink初期的链上聚合系统可以直接监控预言机,因为CHAINLINK-SC可以看 到所有预言机的活动。

3 对于不同数据类型来说偏差的定义有所不同。如果是简单的布尔逻辑,比如航班是否准 点,那么“偏差”指某一反馈结果与大多数结果相反。如果是某一城市的气温,正常情况下 不同传感器和不同数据源的数据可能有所不同,那么“偏差”指重大数值差异。

然而,在我们文中设的 Chainlink 链下聚合系统中,数据在预言机聚合。 就是CHAINLINK-SC 无法直接预言机反馈的结无法直接监控预言 机的可用性和准确性。

,预言机提交的结,因此便了不可认的证据。 Chainlink 出以智能合约的式实现验证服务,针对果提交证据的预言机将得 奖励话说,预言机将受激励问题的行

可用性相较难监控,因预言机不失败记录。因此 Chainlink 出预言机在它们从预言机收到反馈果集合上认证。验证合约接受预言机提交的认证合,并对提交认证的预言机予奖励。认证中一 问题节点应数据请求

无论在链上是链下,预言机的可用性和准确性数据都在链上公开。这一来, 用/开发者就可以在户端实时这些数据,其中包括以太坊中的 Dapp 链 上的同类应用。

5.2 声誉系统

Chainlink 的声誉系统将记录预言机服务及节点的用分,可以评估 预言机的历史服务水平。验证系统的可能成为预言机声誉的要因,并保 声誉数据实可信。而链上服务记录的其预言机节点本身的安全水 平。这些因包括用户对预言机熟悉节点团队背景信基础架构。 我们将 Chainlink 的声誉系统设计链上和链下个模块。在链上模块中,用分可 以智能合约参考;另外,声誉标还轻松在链下获取,因在链下可以高 理大数据并且权方式可以更加灵活

对节点,声誉系统一包括以下任务型 划分的(详情请见第二),有任务:

的数据请求总数:节点过去的(包括完成完成的)数据请求总数 完成的数据请求总数:节点过去完成的数据请求总数。这个数字可以除以

请求总数出任务完成率
接受的反馈总数:计算合约在比预言机的可以接受的

总数。这个数除以的数据请求总数或完成的数据请求总数,可以

准确率
均响应时间:有预言机都需要一时间来认,预言机的速度将有

来预言机的速度均响应时间一按完成数据请求的时间来计算。
:预言机支付保证可保障其服务质量,用手段避免预言机服

商收。这个标既有现实义。

声誉的服务提供商将受激励完成任务,保证的可用性和数据质量。用 损害价值,另外还会。因此,我们希望建立一 个让表现好的预言机能积累声誉,而的声誉过来激励节点 持高水平的服务。

5.3 认证服务

Chainlink 的验证和声誉系统在解决一系预言机作的行,在多数情况 下保障系统完整性。另外我们在此基础上添加了一认证服务,的是避免重问 题生,并在问题发生时,特别是由于女巫攻击镜像攻击导致个区块沦 陷情况。接下来我们将具体述这攻击

女巫攻击镜像攻击

无论是简单版协议是合约内聚合协议,其目标都是避免节点违作,抄袭诚实 节点反馈而不而获。种协议都无法抵御女巫攻击[9]。这攻击中, 有一方能操控多个表面立的节点攻击图在预言机, 操控 以上的预言机参与聚合协议,并在特时间提供错误数据,这可能是了 操纵价值合约中的大交易。有时一个攻击者可以操纵达到合法数的预言机共同 ,而有时是多个攻击共同操纵以上的预言机被攻击操控性特 别,因无法单从链上行判断出来。

另外女巫攻击降低成本会采镜像攻击法,操控预言机从同一个数 据源获取数据并发送至链上。就是作的节点偷偷从同一个链下数据源获取 数据,并假来源获取的。无论攻击者是否选择发送错误数据,镜像攻击法都 能使他们它所来的安全数据要很多,但还会对安全影 响,因多个请求者之间无法别出错误数据。比正常情况下就算数据源http://www.datasource.com 由于的 bug 出了错误的数据,最后合大多数请 求者的数据是能正确的结

我们的长期战略是使用可信硬件消女巫攻击其连错误数据、镜像攻击和预 言机等(详情请见第六)。

认证服务设计理

Chainlink 的认证服务在保障完整性和可用性,在中期并防止镜像攻 击节点。认证服务会为优质节点提供我们在这里再强调正如上文 中提到的那我们为服务提供商分的的是户提供便利。我们不是 制节点否参与到系统中。

认证服务基于节点部作的维度其背监控节点在验证系统中的数据 并提交到链上的结果开展,特别是针对高交易,将结果与直接来自权威 数据源的数据比。市场对预言机数据需大,因此我们相信济激 励支持对节点开展链下计并认是合相关安全标准,比安全(CSA)的 云控矩阵相关[26],并提供有用的安全信,以证明预言机的数据源和智能合 约代码求开展作。

除了声誉链上和链下欺诈自动化系统以,认证系统女巫 攻击和其链上系统无法如果所节点都认从 西边,那终 USER-SC 接受这个明错误的数据。然而在时, 西边条记录很明就能别出来是错误数据。




Chainlink官方渠道


以上是关于中间件和API的作用的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.6 中的“绑定”中间件有啥作用?

CORS 中间件在 nodeJS 中不起作用

在使用 node.js 和 Express 构建的 api 中使用 cors 中间件时出现 CORS 错误

对一条路由使用多个身份验证中间件

使用 IMiddleware 时添加自定义中间件不起作用

Laravel Sanctum Token API 身份验证在 Postman 中不起作用