前言
由于区块链无法自己获取链下数据,也无法向链下系统传输数据,所以才能在安全和可靠性上做到极致,整个网络只需要使用区块链账本中已经存储的数据针对一组简单的true/false问题达成共识即可,比如“公钥持有者是否使用对应的私钥对交易签名?”、“公钥地址中是否有足够的交易资金?”,”比如某个智能合约中的交易类型是否合法?“。区块链共识覆盖范围非常窄,因此智能合约具有非常高的确定性,可以完全按照合约中写入的代码逻辑执行,确定性远高于任何传统网络。
但是,智能合约中的大部分应用场景都必须连接链下数据和系统才可以实现。比如说,身份智能合约需要接入PKI体系才能确保个人信息的有效性;授权凭证智能合约需要接入相关文件和数字签名才能确权;金融智能合约需要接入市场价格数据才能执行合约交割。以上所有数据都是在链下生成的,而这些数据无法直接传输至链上,只能基于已有数据以一种确定性的方式产生新数据(通过交易的形式输入),而区块链上的智能合约或者去中心化应用(DApp)对外界数据又有强烈的交互需求,这与智能合约的执行环境产生了矛盾。
那么进行链下数据认证就变得尤为重要,将链下数据认证后传输至链上,需要通过一个中间层——预言机,通过预言机中间件,智能合约可以主动获取外部的数据。
预言机功能架构
工作流程
注:此图来源于:Chainlink 白皮书
这就是理想中预言机的工作流程,即用户的智能合约把请求给链上 Oracle 合约,通过链下的 API 接口获得外部数据,更确切的说是外部把数据给链上的 Oracle 合约,然后 Oracle 合约再把数据给用户的智能合约。
看起来很简单:预言机只是一种调用外部数据,然后把数据返回到区块链中的中间件。但是在使用过程中,将要面临一下几个难点。
预言机使用难点
- 如何保证获取的外部数据源真实可信?
- 如何保证数据在传输和处理过程中的安全?
- 时效性、成本?
如何保证获取的外部数据源真实可信
这是预言机使用过程中最核心的问题,为了保证数据的相对可信,需要在设计过程中主要在数据源认证、数据获取标准流程、数据统一格式等方面进行约束:
- 数据源选取和可信认证。比如对web数据的获取,选取的数据源需持有证书
- 数据获取标准流程。开发者必须明确执行引擎、用户、外部数据源与预言机的数据交换流程,且对于不同的数据源类型要能够统一或明确区分数据的交互流程
- 数据交互格式的统一定义。不同的数据源类型有不同的数据交互格式,以传感器(物联网硬件)作为数据源和以web作为数据源获取到的数据格式是不一样的,针对不同情况,明确统一的数据编解码层。
如何保证数据在传输和处理过程中的安全
预言机通过两个阶段对进行中的数据实现可靠保证:
- 数据从外部数据源到本地,采用HTTPS协议去保障连接和数据的正确性、完整性
- 数据从本地到链上,预言机采用可信执行环境(TEE)、可验证随机函数(VRF)、零知识证明以及同态加密(HE)技术来确保数据处理过程中的机密性、可靠性。比如说,趣链区块链平台研发了基于指令集扩展( SGX) 的 TEE 实现;长安链的paillier半同态加密
时效性、成本
链外的数据交互处理相对于链内来说,在数据源可信度、预言机可信度、处理复杂度等方面都会增加,而真实场景中可信度的不同,严重影响着预言机的实现效率以及实现成本。
在公有链中,默认多方完全不可信,所以会通过预言机模型实现聚合处理、共识规则、奖惩机制以及声望系统。已达到提高作恶成本的作用,但这提高了功能实现的复杂度。
在联盟链场景中,预言机使用场景相对可信封闭,且机构节点间可信度高,但预言机实现效率高、成本低,但是存在单节点作恶的问题。
设计模式
- 立即读取(immediate-read)
- 发布/订阅(publish–subscribe)
- 请求/响应(request–response)
应用场景
预言机作为区块链与现实世界进行数据交互的桥梁,应用场景很多,可以说一切需要与链下进行数据交互的DApp都需要预言机,比如金融衍生交易平台、借贷平台、快递追踪、IOT、稳定币、博彩游戏、保险、NFT等,目前最主要的场景就是DeFi。并且,预言机在某种场景下可以充当异构区块链之间相互操作的连接器或桥梁。
目前预言机项目
Chainlink
一个去中心化的数据网络,每个预言机都是网络中的一个节点,其架构分为链上组件和链下组件。链上组件负责和用户交互,收集、响应用户请求,而链下组件则是之前提到的数据网络,用于处理数据获取和传输。Chainlink的Town Crier使用英特尔SGX硬件,保障链下数据隐私以及运算安全性
Chainlink预言机需要通过LINK token的转账来实现触发。
预言机服务购买者通过指定构成服务级别合约方案来筛选预言机。
技术架构
Chainlink服务水平协议合约会生成三个子合约,即Chainlink声誉合约、Chainlink订单匹配合约以及Chainlink聚合合约,更多见Chainlink白皮书(V1)——链上架构:
- 声誉合约会查看预言机服务商的历史服务水平,验证其真实性和历史表现,并且淘汰声誉较差或可靠度较低的预言机节点
- 订单匹配合约将请求合约中的数据请求发送至Chainlink节点,并接受节点的竞标,然后订单匹配合约会选择适当数量和类型的预言机完成任务
- 聚合合约从所选择的预言机获取全部数据,验证并聚合数据,最后得出准确结果
Chainlink合约可以升级,它仅是将新的数据请求合约迁移到新的预言机合约集合中,新旧版本的合约会同在一台预言机内。
Chainlink设计了分布式oracle网络(DONs)来提供高效的链外计算资源访问,通过DECO和Town Crier两项技术保障了预言机从链下检索数据时的用户隐私和数据安全(关于这两种技术参见白皮书(V2)第3.6.2节)。
DONs通过去中心化、加密工具和加密经济保证,为智能合约和其他预言机相关系统提供高度可信的支持层。
DONs的模块化设计可以支持多种BFT协议、PoW或Pos协议,原则上DON可以建立在基于委员会的或者无许可的共识协议上。为了避免Pow协议中矿工抢先交易(将自己挖掘的交易插入到同一区块中的较早位置),Chainlink使用了公平测序服务(FSS),它能确保交易的公平排序,避免对用户交易和其他类型交易(预言机报告传输)的前置运行、后置运行和相关攻击,并且FSS还可以降低用户的网络费用(如Gas费用)。
DONs采用门限签名来支持链上和链外数据的可用性。
基于请求/响应设计模式的实现
注:此图来源于:Chainlink 预言机基本原理
消费者合约对应架构中的USER-SC:由智能合约或第三方委托发起的数据请求
oracle合约对应架构中的CHAINLINK-SC:与USER-SC交互的接口
Chainlink节点上部署了预言机核心功能和适配器
Chainlink工作流程:
- 消费者合约发起链上请求,请求数据
- oracle合约为预言机记录事件
- Chainlink节点的核心软件收到事件记录并向适配器发送任务
- 适配器实行任务,向外部API请求数据
- 适配器处理返回数据并返回至核心软件
- 核心软件将数据传回oracle合约
- oracle合约将数据聚合成单一数据,并返回至消费者合约
Chainlink 节点对数据源的验证
注:此图来源于:Chainlink 白皮书第7-1节
- 验证单一数据源的数据
比如说,若是有五台预言机传输了来自同一市场价格系统发送的价格数据,而另外两台预言机传输了不一样的价格数据,那么Chainlink聚合合约就会甄别出这两台预言机有问题,并且会剔除它们的结果
- 验证多个数据源的数据
聚合合约对多个数据源反复进行验证,然后将所有经过验证的数据取平均数,聚合成单一数据。Chainlink采用基于门限签名的Schnorr签名机制来链下聚合数据,这样避免了在合约内聚合的高额链上交易费用
保障预言机数据可信
Chainlink通过从源头改变数据格式来保障预言机数据的有效性:若数据源对其数据附加数字签名,传递数据的服务器就无需被信任,USER-SC只需检查数据上的签名即可。
缺点
- 成本高
- 随着服务业务规模的增长,节点造假获得的潜在收益越来越高,预言机的安全性会逐步降低
Band
一个基于Cosmos的定位 Layer 2 中间件协议,为区块链提供了合约调用更快、手续费更便宜、更易于集成和可扩展的去中心化预言机。
Band 协议的技术架构及其实现
具体来说,Band 预言机解决方案包含「链上」和「链下」两部分。链上是一个智能合约,主要负责数据集代币发行和资产托管和数据验签,而链下则是一个由各个数据集节点组成的p2p 网络,在这个网络中,每一个数据集都会有多个节点充当数据提供者的角色。
Band 网络中有两种类型的节点:数据集节点和验证节点(也是协调节点)。节点可以根据自身的经济利益考量和维护能力来选择做其中的一种或两种类型的节点。更多信息见Band网络参与者。
Band 网络中执行严格的验签共识机制,即,只有当某个数据通过了数据供应商网络中2/3的节点签名后,这个数据才会被发送到链上,提供给链上应用,而主导整个验签流程的是验证者,验证者还对支持外部数据查询,具体实现戳。
发布了预言机脚本相关的数据源为数据集节点。通过Owasm扩展模块来编写连接到各种公共API的预言机脚本,示例实现戳;数据源通过远程数据源执行器执行,它托管在云服务提供商上面(见功能服务),这种设计避免了在数据源无法正常工作的情况下(例如死循环、错误的代码执行),验证节点因错误而过载或崩溃。
Band区块链上的预言机结果可以通过区块链间协议(IBC)或通过定制的单向桥以最小的延迟(大约5秒,Band设置的阻塞时间大约为3秒)发送到其他区块链。
当最终的数据请求结果成功存储到Band上后,就会产生一个预言机数据证明,这是一个Merkle证明,表明数据请求的最终结果存在于Band上。然后,其他区块链上的智能合约可以使用此证明来验证数据的存在以及查询和解码存储的结果。
注:此图来源于:Band白皮书
预言机获取数据流程
- 用户通过广播向Band的预言机发起数据请求,请求内容包括调用的预言机脚本的ID以及其他查询和安全参数。
- 预言机脚本的准备函数发出继续执行脚本的所需的一组原始数据请求
- 随机选择(去中心化验证者抽样)的验证者将检查原始数据请求并按照请求执行相关数据源程序
- 成功从所有数据源查询到数据的验证者将通过广播向Band网络提交原始数据结果以及其他信息
- 若数据请求的安全参数中指定的足够数量的验证者提交了结果,则开始聚合请求结果
- 每个从数据源接收的数据聚合为最终的单个数据,这个最终结果将被存储在世界状态中,同时供其他链使用
- 最终结果存储后,会产生一个预言机数据证明
预言机请求链下数据
Band的数据集节点使用Yoda来满足预言机请求的数据。Yoda用来帮助数据集节点通过执行数据源脚本自动向数据提供者查询数据,然后提交结果以完成请求;Yoda通常作为一个进程与主Band守护进程一起运行,且它拥有自己的本地钱包,帮助用户发送交易;Yoda以事件驱动作为机制,且并发处理任务以提高性能(协程方式)。
注:此图来源于:Band白皮书
Yoda的执行流程,更为详细见上图:
- 监听传入的预言机请求并过滤无用请求
- 根据收到的请求加载数据源脚本
- 执行数据源以及从数据提供者获取结果
- 将结果收集到消息中并存储在本地待处理列表中(文件缓存结果)
- 根据待处理列表发送交易以完成预言机请求
证明获得预言机数据的有效性
通过轻客户端验证结果的有效性,该客户端的一个实例存在于Band每个区块链上。用户将请求预言机内容以及响应,作为请求轻客户端的内容,轻客户端使用这些信息来证明用户请求的数据是否存在于Band网络中,并且客户端会检查统计验证者的投票权是否足够,一旦统计的投票权超过了2/3的阈值就成功的验证了预言机结果的有效性。
注:此图来源于:Band白皮书
缺点
- 随着服务规模的扩大,安全性会逐步降低
NEST
是一个基于矿工报价博弈的去中心化预言机系统,采用了一种分布式报价、套利者验证吃单、链式价格以及资产级数增长额度方案来解决预言机的问题。
NEST 系统每个区块都会有一个价格生成,如果某一个区块没有生成新的报价,则使用上一个区块的价格。
NEST 的解决方案
以太坊网络为例,对整个方案进行说明,该方案由一整套NEST Protocol组成,包含以下模块:报价工厂合约、报价合约、价格合约、数据合约。
注:此图来源于:NEST 预言机中文版白皮书
缺点
- 假如报价矿工较少,则攻击成本会降低,报价频次越高,攻击成本越高;假如验证者较少,则可能会受到大额报价攻击,验证者越多,越安全。
DOS Network
是一个 Layer-2 的预言机解决方案,它通过在链上部署一个轻量级智能合约,链下是一个 p2p 网络,服务节点的选取和数据验证采用VRF+阈值签名等技术,保证了去中心化和数据安全
基于请求/响应的架构实现
以Ethereum区块链为例,简要讨论由用户合约发起的按需数据查询的整个过程。
注:此图来源于:DOS Network 白皮书
①. 用户合约通过对DOS链上系统,特别是DOS代理合约的消息(message)调用发出数据查询请求;
②. DOS代理合约触发带有查询参数的事件(event);
③. DOS客户端(链下),持续监听链上定义好的事件,并接受来自数据提供者的通知。通过使用可验证随机函数(VRF)构建的分布式随机引擎,随机选择一个注册组;
④&⑤. 选定组中的成员同时进行解析,请求web api,执行已配置的脚本;
⑥. 将通过t-out-if-n门限签名算法达成“组内”共识,并将共识之后的结果反馈给DOS链上系统,只要随机选取的的组中有超过t个成员是诚实的,就能得到共识之后的结果。选择的组成员的身份和QoS(响应性/正确性等)性能将被记录在链上,用于监测和数据分析
⑦. DOS代理合约通过调用用户合约提供的回调函数通知用户合约结果已经就绪
缺点
- 节点数过少的中心化风险
- 随着所属服务业务规模的增长,节点造假获得的潜在收益越来越高,串通风险会增加
Oraclize
oraclize通过提供多种加密证明方法,构建可信的数据预言机,且只为以太坊提供中心化预言机服务
Oraclize运行原理
注:此图来源于:Oraclize--DApp与互联网交互
- oraclize在以太坊上部署了一个名为usingOraclize的智能合约,通过在自己的智能合约中引用该智能合约进行数据访问服务,然后根据API文档中描述的方法进行相关调用
- oraclize提供了多种数据源服务器,比如URL访问、数据搜索引擎、区块链内容数据、IPFS文件访问等,其中URL访问和区块链内容数据提供了基于TLSNotary的可信证明技术
- Oraclize可信第三方证明机制——软件+硬件自证清白
- TLSNontary Proof
TLSNotary Proof充分利用了TLSNotary 1.0和1.1协议(代码开源)的功能,允许在服务器、受审核方(Oraclize)和审核方(Amazon云主机)之间分割TLS主密钥,通过给Amazon云主机共享部分服务请求数据的方式,让审核方可以验证信息的同时,又不至于泄漏更多信息,从而有效避免了其他参与者在本地修改html代码、PS图片等证明做假的情况
- Android Proof
Android Proof利用Google开发的称为SafetyNet的软件远程证明技术,分别验证了“一个特定的应用运行在一个安全、没有后门的环境里”、“运行的代码和事先公开的是否一致”以及“系统版本是最新版本”
- Ledger Proof
Ledger Proof(Ledger指法国的专门硬件强制加密货币钱包的Ledger公司,而非指账本)利用代码证明和设备证明功能来证明任何第三方,证明Oraclize开发的应用程序正在真实Ledger设备的TEE中运行
缺点
- oraclize成为了整个系统的单点故障(SPOF)
- TLSNotary生成的证明很大,回传证据到链上需要花费巨额的Gas,导致总成本高于文档中所写的成本
Chainlink vs Band Protocol
Chainlink
Chainlink使用去中心化预言机网络允许区块链安全的与外部数据、支付方式和事件交互,Chainlink的网络由数据提供商、智能合约开发人员、节点运营商、安全审计员、研究人员等组成的开源社区驱动。
Band
Band Protocol作为一个跨链数据语言平台,可以获取真实世界的数据并将其提供给链上的应用程序,同时,可以将API连接到智能合约,以促进直接从源头交换信息
相同点
两者都被用于以下服务:
- 去中心化金额(DeFi):一系列新的去中心化金融产品,提供类似于常规金融机构提供的服务,如保险、交易服务和借贷
- 价格信息:用于提供可靠的价格数据,允许智能合约轻松查询资产价格,从而计算出常规货币、商品、股票和加密货币等的汇率
- 合成资产:代表另一种资产(如股票或商品)的加密货币代币,需要预言机来确保它们的价值与标的资产的价值非常匹配
两者都支持SaaS平台
区别
- Chainlink建立在以太坊上,而Band建立在Cosmos上。Cosmos的可扩展性远高于以太坊,它几乎可以立即处理交易,没有漫长的等待期、网络拥塞和不必要的高昂Gas费用,也就是说Band的交易成本是要低于Chainlink的
- Chainlink使用SGX实现预言机的保密性,存在与SGX相关性能、漏洞的影响
- Band更倾向于向DApp和智能合约提供实时数据
总结
从以上预言机项目的架构中,可以看出预言机一般分为两层,由几个关键组件构成:
- 链上部分:在支持的区块链链部署一组预言机合约,主要功能包括请求处理和响应/计算结果验证,统计监控,支付处理等功能。链上系统合约也提供了一个统一的接口给所有支持的区块链上的用户合约使用。
- 链下部分:由第三方用户(即预言机节点运营者)运行的、实现了核心预言机协议的客户端所组成的第二层分布式点对点网络。协议客户端主要包括:事件监听和链适配器、分布式网络、链下共识、请求/计算任务处理等
预言机嵌入区块链
波卡 + Hazel
Hazel是一个面向区块链提供去中心化的预言服务,基于波卡(Polkadot)基础上的新一代可验证的计算预言机,旨在通过共识机制、智能合约 、可信计算、隐私保护以及链上链下数据的交互,并真正支持高并发企业级互联网应用的链上运行。
注:此图来源于:Hazel 白皮书
FISCO-BCOS + Truora
Truora是 FISCO-BCOS 区块链平台的预言机服务解决方案,是在广泛调研的基础上针对 联盟链 场景设计的可信预言机服务。
注:此图来源于:Truora-Service组件
百度超级链 + 智能预言机
智能预言机嵌入超级链有两种技术方案:
- TEE可信方案
基于区块链底层的中心化数据预言机,主要是利用因特尔软件防护扩展(SGX)为智能合约提供经过身份验证的数据。SGX维护了一个名为Enclave的可信执行环境(TEE),用户核心程序代码在Enclave模块中执行,保护其不受其他恶意程序的干扰(包括操作系统本身)。终端用户也可以远程验证SGX中Enclave模块内核心用户程序代码的执行安全性
- 去中心化方案
注:此图来源于:超级链智能预言机
优点:
- enclave可以保护应用的完整性(即:数据、代码以及控制流)不受其他流程影响
- enclave可以保护应用的隐私,其他流程无法查看其他数据、代码和执行状态
- SGX能保护enclave中的应用不受恶意操作系统的攻击,即使是系统管理员也无法看到应用运行情况
缺点:
- 作为中心化解决方案,就存在单点失效的问题
- SGX受到最新针对英特尔CPU和SGX的安全漏洞影响,这些漏洞无法在不严重损害性能的情况下被轻易修补
- SGX存在其他安全问题,如同步错误和其他一些会导致控制流程被劫持和SGX中Enclave模块泄露私人信息的攻击,此点源自
- 对于在SGX中Enclave模块内部运行的可信部分,也存在限制:SDK只提供有限的库函数
IRITA + Chainlink
注:此图来源于:BSN、IRITA和Chainlink达成合作,共同建立BSN跨链和预言机服务文章来源:https://www.toymoban.com/news/detail-810380.html
基于自有链的设计方案
这是我白嫖就能看的吗?文章来源地址https://www.toymoban.com/news/detail-810380.html
到了这里,关于链下数据认证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!