当前位置:首页 > 区块链新闻 > 正文

区块链中关于Data-Feeds、链下计算和随机数的研究

来源: 互联网时间:2017-02-04 15:50:00

在区块链公链上运行真实商业社会的智能合约可能需要引入外部数据,即链下数据,如金融数据、财务数据、商业数据、气象数据、社交数据等。举例来说,货币汇率、国家GDP数据、城市温度、体育比赛结果等外部数据都有可能影响智能合约的运行结果。在研究中,Data-feeds是指任何系统、流程或技术用于获取链下数据并将其用于在区块链上智能合约或去中心化应用的运行。

qtum-1

使用基于内建虚拟机的平台有一定的局限性,链上的所有节点必须实施运行所有智能合约,直接导致处理速度的下降和系统冗余运行。这样一来,在链上执行设计复杂的智能合约将会占用大量的计算资源。因此,所有节点都执行智能合约并不是一个很好的选择。若链下计算花费低廉,将一部分智能合约的源代码在链下运行或许可以解决处理速度下降和资源占用等问题。此外,考虑到区块链公链(链上数据和计算均公开可见)的透明性以及金融机构对隐私的要求,链下执行可以在一定程度上为智能合约数据和运行提供更高的隐私性。

此外,很多重要的智能合约,如利用随机计算打破平局,大选结束后进行选区选票审计,零知识证明,分割选择协议,彩票开奖过程等,都需要一个公平的随机数生成器,即对于合约中所有参与方都公平的随机数生成器。

1. Data-feed and Off-blockchain Executions: Oracle Approaches

1. Data-feed和链下执行实现方式:Oracle实现

所谓的Oracle提供了一种通用的方法来获取链下数据,并将其提供给智能合同。 Oracle是由区块链中的参与者信任的特定组织(可以为实体,节点或地址)。 Oracle网络可以用于搭建链下计算和合约执行的的系统。

早在2014年,名为“SchellingCoin” [1]的协议就提出了“最小化信任”的概念。它是一个基于激励措施的去中心化Oracle网络的概念验证,对输入数据(如美元兑欧元的汇率)进行后续的操作。首先,系统中预先选定的参与者(即Oracle)遵循两步承诺协议提交数据,保证参与者无法知晓其他参与者的数据。然后,智能合约将选择最接近中位数的数据,并对提供数据的Oracle进行奖励(N个“schells”)。因此,该协议的提出者相信,SchellingCoin协议会激励参与者提供真实的答案,因为“协调谎言是一个及其困难的事情”。然而,这个方法也有一些缺陷,如协议并没有提出一个明确的选定参与者或者公钥地址的标准;也没有提供防止冒名攻击(Sybil attack),共谋攻击(collusion attack,一个或多个实体通过控制特定比例的票数导致操纵中位数的攻击)和micro-cheating (oralce可能有动机微调他们的答案)等安全漏洞的方法。

Truthcoin [2] 中也提出了Oracle网络的概念,但仅适用于输出二进制结果的预测市场(如德国足球队是否获得了上一届世界杯冠军)。在此协议中,结果是由Oracle所持有代币(称为“Votecoins”)的权重决定,而代币是依据Schelling协调博弈原理进行分发。这个方法的缺点:1)难以建立和维护一个适当的激励措施来吸引更多的实体使用此协议并协助解决此协议的安全漏洞;2)其有限的使用范围(仅适用于输出二进制结果的预测市场)将很多金融、经济、商业、气象和社交行业的智能合约应用排除在外。

在“Town Crier”中也提到了一种data feed系统,它融合了前端的智能合约(在区块链上)和后端(在某个实体、组织或者单个的服务器上)的代码执行硬件保护,使用的是英特尔新的软件保护插件或SGX(SGX是一组新的指令,可以实现用户代码级别的硬件保护)。SGX受信硬件可以提供极高的安全性和可信程度。经过特殊的设计,智能合同前端为请求数据的其他合同提供API接口。这个系统扮演着不同的智能合约、不同的受信网站之间信任的桥梁。Town Crier的作者计划将该系统以网上服务的形式推出,但该系统的稳定性取决于英特尔认证服务(用于认证SGX)的稳定性。以此同时,该系统还有一些缺陷。比如系统易受由网络或系统非保护模块引起的拒绝服务攻击;系统易受网络流量分析和针对机密数据或应用的损坏中继攻击。另外,最近推出的英特尔SGX也被爆出安全隐患和漏洞(详见[8],[9]),导致SGX实例被破解或损坏的风险。

为了防止单个SGX实例破解或损坏,作者还提出了一种方案,即使用多个SGX实例(旨在通过同步复制来增强系统的健壮性)和多数投票(也就是说,智能合约可以向多个SGX实例请求数据并在响应中实现多数投票)。但是也有可能出现一个或多个实体通过控制超过50%的投票而进行共谋攻击。另外,在区块链的概念里,其安全性也与去中心化的特性息息相关。因此,少量存在的启用SGX的主机增加了中心化所带来的风险,针对中心化系统的攻击也将随之而生。

Off-chain Executions
链下执行

参考文献 [3] 中提出的系统旨在为智能合约提供更好的隐私性(为了满足金融行业对机密性的严格要求),同时为了降低链上计算的高额成本而进行链下运算。这个系统的缺陷是它设置了一个特殊的合同方(叫做最小信任管理器),可以看到私有交易和终止协议。为了弥补这些缺陷,作者提出了对终止协议的最小信任管理器进行经济上的处罚,同时用受信的计算机硬件(如因特尔SGX)扮演最小信任管理器的角色,或者用多方用户(智能合约中的参与方)计算代替最小信任管理器。

此外,还有以下关于链下计算和智能合约代码执行的概念验证:

1. 参考文献[1]中,SchellingCoin协议也可以提供链下计算的运行结果。网络中的Oracle进行链下计算并提交运算结果,根据协议,提供最适合结果(那么协议只奖励提供最常见结果的那些Oracle(该协议的变体将是使一个节点进行计算并且将使用“SchellingCoin”仅“随机地”检查随机的1%的工作)的Oracle将会得到奖励。[8]中还提到了存款要求和更为严厉的处罚,但并没有提出具体的激励措施来解决安全方面的问题。

2. 参考文献[3]中提出的Oracle网络的工作原理如下:每个Oracle在链下运行特定的源代码并提交运行结果。如果一个Oracle被“感知”到提交了一个不正确的结果而被“挑战”,该网络将会运行代码并将计算出来的结果与Oracle提交的答案进行比对。如果答案不一致或Oracle不回答挑战,则Oracle失去其安全押金。在[3]中没有提到如何激励Oracle加入该协议。

3. 参考文献[4]中提出的基于押金的链下计算协议工作原理如下:首先,需要进行计算的智能合约向Oracle网络提出请求,并提供赏金(或佣金),用来奖励提交运行结果的Oracle,并要求其进行注资(大额金额)。当一个Oracle提交了运行结果,合约将等待是否有其他Oracle对提交的答案提出异议。如果有争议发生,将会在链上进行全计算,并对提交正确答案的Oracle进行赏金奖励。这个方法的缺点包括不易设置赏金和注资金额等。[11]中还提出了通过更复杂和更难实现的方法建立一个用于大量计算的计算中心。

4. 参考文献[5]中提出使用称为“Unikernel”的技术来提高区块链代码执行性能。Unikernel提供了一个隔离的代码执行环境和最小化的运行系统。但是,该协议无法对返回值达成共识。

最后,在[11],[12],[13],[14],和[15]参考文献中提到,通过设计安全的多方计算协议,比特币被用来确保链下计算的公平性。

综上,设计一种安全的协议并且适当的激励Oracles(节点或实体)和智能合约中的各方参与的oralce网络是比较困难的。目前尚未出现广泛使用的、用于数据馈送和链下计算的Oracle网络。一般来说,虽然Oracle网络仍面临着安全上的漏洞,但如果大多数人对其安全性和可信度抱有足够的信心,Oracle网络的广泛使用指日可待。但如果智能合约存在大量的安全问题,高度中心化的、受信任的,并且可以提供数据馈送和链下计算的其他平台将会取代Oracle网络,并带走Oracle网络潜在的用户群体。

2. A Simple Deposit-Based Approach for Off-Blockchain Executions
2.一种新型的基于抵押(Simple Deposit-Based Approach)来执行链下计算的方法

量子链并没有选择设计一个基于共识机制的Oracle网络(可能会导致安全漏洞的出现),并通过引导指令触发链下计算中心(这可能很难实现),而是在量子链平台上使用一个通用且简单的协议执行中等计算成本代码的链下计算(这样可以大量降低链上执行的计算成本和经济成本。

为此,运行智能合约的各方(部分源代码可以在链下执行)可以通过与执行代码和验证交易相同的内置虚拟机客户端进行交互,这里所指的客户端是指可以用于执行链下计算的客户端。

基本上,在上述提到的协议中,参与执行合约的各方均提供与链上运行所耗费经济成本相对应的抵押,用于链下独立运行部分代码(步骤或阶段)。如果链下代码执行结束后对合约状态和合约运行结果有异议,则会在链上再进行一次运算从而判定正确合约状态或结果。对于提交不正确结果(或合约状态)的一方(或多方),其抵押将被用于支付链上计算的费用。如果合约各方对执行结果没有异议,则链上计算消耗的花费会根据事先约定的规则从抵押中扣除,剩余的部分将会返还。

举个例子,一个智能合约包含三个阶段:A(链上执行),B(链下执行)和C(链上执行)。首先,阶段A,合约中参与方必须提供所需的输入信息(包括将资金和抵押存入、托管的交易);然后阶段B包括可以在链下执行的交易、操作和/或(中等计算成本的)计算;最终在阶段C,智能合约将根据上一阶段的运行结果进行资金和抵押的分配。更加具体来说,在阶段A中,除了合约相关的资金,参与执行合约的各方还需提供与链上运行所耗费经济成本相对应的抵押,而这部分抵押将会以托管的形式持有,直至阶段B进行结算。接着,合约各方在链下执行计算,并将计算结果(合同状态)提交至区块链。如果在阶段C的开始阶段,任何一方对阶段B的执行结果有异议,则在区块链上进行合约重执行,并对运行结果进行比对,提供错误结果(或状态)的一方(或多方)支付链上代码执行所需的费用。

在基于抵押的方法中,涉及的各方必须支付不能使用代币执行其他操作的机会成本。平台的客户端包括一个内置的信息工具计算运行智能合约所耗费的经济成本。

上述提到的协议产生了一种情况(或一种情景),即没有任何一方有单方面改变合约执行结果的动机。假定一方欲单方面改变合约执行结果,不仅不会得到预想的结果,还必须支付链上计算所需的经济成本。在这里,用链上运算结果解决针对运行结果纷争的方法可以有效衡量合约参与方的可靠性。用博弈理论语言可以理解为,存在一个激励兼容的纳什均衡,使背离协议者不会导致净收益。

3. Analyzing a Simple Approach for Data-Feeds

3.数据馈送简单方法的分析

一般来说,执行智能合约需要可信的数据来源,比如得到社会公认的机构、公司或具有较高声誉(全球性和/或区域性)的组织机构。Oracle网络若成功部署,没有Oracle会测量(检查、注册、验证)自己的数据,如某个国家的消费者价格指数(CPI)或某项体育赛事的比分;相反,这些数据将会从可信的第三方机构或大型传媒公司获取。

更简单获取数据来源的方法是通过可信机构、组织提供的接口(API)或Web服务。第一个前提条件是,一个或多个机构提供智能合约运行所需数据的API可以通过HTTP的方式免费访问,并且不需要任何形式的许可证明、注册流程等。另一个前提条件是智能合约所使用的编程语言可以直接支持HTTP请求。

为了使智能合约在执行过程中获得所需的数据,应在合约中指定数据源(为每个数据源代码编写数据查询公式)。如果使用超过一个数据源,应当使用预先设置的共识机制对不同的数据源进行筛选(例如,某个国家的CPI值可以由两个或三个受信机构提供数据的平均值)。然后,区块链上的所有节点将通过运行相应查询公式的代码从指定的数据源获取数据,并从运行结果中选取最终用于数据馈送的数据。

为了减少获取链下数据的计算和经济成本,合约参与方可以使用类似于上面描述的用于链下和源代码执行的简单方法,大致工作原理如下:首先,数据源API和API请求所需的相关花费需要提前由合约参与方在合约中进行相应资金抵押(注,从数据源获取数据需要对区块链上的全节点进行数据请求或查询)。然后,当智能合约需要处理链下数据时,合约参与方通过运行链下代码,通过数据源的API独立获取链下数据,并将其馈送至合约中(该过程可以由客户端软件自动运行)。之后,如果参与方对提交的数据有异议,则将代码在链上进行重新运行以确定正确数据。对于提交不正确结果(或合约状态)的一方(或多方),其抵押将被用于支付链上计算的费用。如果合约各方对执行结果没有异议,则链上计算消耗的花费会根据事先约定的规则从抵押中扣除,剩余的部分将会返还。

无论是免费还是付费服务,为了获得访问数据源API的权限,通常需要某种形式的订阅或注册,从而方便合约参与方进行API数据的访问。但是,考虑到访问这些API需要遵循使用私钥和机密数据的协议,加之区块链的公共属性,导致相关安全漏洞的出现。例如,从数据源API获取外部数据的查询语句使用了任意合约参与方提供的keys。然后,合约参与方如果对合约执行结果有异议(例如某项体育赛事的比分),可以使用其他合约参与方的keys(可以从公共区块链上读取)消耗所有可供调用的API calls,或无限期的延迟合约的运行,从而单方面的破坏合约。

因此,为了解决安全问题,有必要设计一种协议将数据源和区块链连结起来。寻求愿意加入该协议的组织机构可能比较困难,但是如果有足够的经济激励,如协助其进行订阅服务、许可证等销售,或者对加入协议的组织机构进行代币的奖励。

这种方法意味着数据源可以通过运行API数据服务的轻量级客户端直接与区块链(没有任何中介)进行交互。在以下情况中,对有意愿与个人或其他组织进行交互的机构、公司、盈利及非盈利组织进行奖励:1)与区块链交互的成本足够低(例如PWC可以协助参与组织进行数据源的控制,以激励更多方的加入);2)有足够的经济激励(例如,受信的大型媒体或旨在出售馈送数据许可证的其他盈利性质的数据提供商);3)被机构或其他非营利组织视为符合公共利益、公共物品本身和/或提供公共物品手段的区块链公链(例如,Qtum平台可以被某些中国机构视为符合公共利益,因为Qtum促进了国内商业和经济的发展)。

4. Random Number Generation in the Blockchain Context

4. 区块链上随机数的生成

如本节开头所述,一个不受合约中任何一方影响、且对任何一方均公平的随机数生成机制以供智能合约的执行是十分重要的。从这个角度出发,区块链社区中已经有若干随机数生成器(RNG)方案。

参考文献[23]中提出的方案是将比特币区块链作为一个公开的、去中心化的随机数数源(不依赖任何其他可信机构)。当新的区块产生时,通过这种方法在区块头和其哈希值运行随机性提取函数,并产生几乎均匀分布的随机值字符串;从而每次新的区块产生时,就会有一个新的随机值(大约每10分钟)。

这种方法需要考虑计算成本和挖矿过程中的奖励。然而,为了操纵随机数的生成过程,矿工可以阻止有效区块的产生(支付相应的成本)。如果攻击者的预期回报大于挖矿的奖励(2016年大约是12.5个比特币,不考虑交易费用),则这些攻击是有利可图的。因此,这种方案的缺点之一是,对于某些价值高达上百万美元的智能合约,操纵随机数生成的成本十分低廉,合约参与方可以贿赂矿工从而达到操纵随机数生成的目的。该方案的另一个缺点是其时间的不准确性。平均来说,每十分钟会产生一个新的区块,但仍会有一些差异,而且上一个区块的准确block-height值我们也无法提前预知。另外,如果矿工属于矿池的一部分,则矿工无需考虑组织区块产生所需付出的机会成本,因为矿池仅根据矿工所占算力的比例来分配奖励,而不是根据有效区块的数量。

为了增强安全性,[16]中还提出了上述方案的两种衍生方案。一种是故意降低随机数的计算速度(如使用迭代哈希或memory-hard功能),因此攻击者需要花费时间考虑是否放弃该有效区块,与此同时其他矿工可以找到并发布有效区块(导致攻击者失去挖矿奖励,从而失去了操纵随机数生成的可能性)。而这种方案的缺点是慢速哈希函数对于智能合约参与方来说成本过高,以至无法使用该随机数数源。

如果我们考虑使用随机数选择特定区域和/或待审计选票的选举审核方案,则[23]中提出的另一种衍生方案更容易理解。其包含两步协议,工作原理如下:首先,从一个或多个半信任代表(如选举管理员,监管机构或各方代表)处获取一个随机数并公布随机数的哈希承诺。然后(第二步)公布第一步中选择的数字,并将其与区块头进行提取函数运算,从而得到随机数。这种方案的缺点是,如果某个代表在第二步中没有公布选中的数字,则其结果被视为无效。因此,有必要通过某些信誉或托管系统来确保代表及时公布随机数,但这需要设置合理的奖惩措施以保持代表的公正性。

在[17]和[18]中提出的RanDAO方法基本上是一个随机数生成器智能合约系统,使用基于承诺、抵押和信誉的两步协议。该系统可以接受其他智能合约发起的生成随机数请求(需要支付相应的费用),工作原理如下:首先,根据抵押或信誉体系选择的随机数生成方需要选择一个随机数并公布其哈希承诺值。接着在第二步中,生成方需要公布第一步中选择的随机数,智能合约将验证其有效性(将随机数值与其哈希承诺值做比对),通过对生成方提供的数据进行相应的运算即可得到随机数,最后将该随机数发送至提交随机数请求的合约。如果双方都遵循此协议,则随机数生成方可以从申请方获取相应利益,并对违反协议方进行相应的惩罚。这种方法的缺点是,攻击者可能串通多个参与方发起共谋攻击,通过在第二步中不公布选择的随机数,从而导致整个随机数生成过程失效。因此,需要有各种不同的智能合约满足不同的安全和性能要求。从这个角度来说,对合智能参与方设置适当的奖惩制度比较难实现,也就直接导致难以对单点或共谋攻击进行防范。

在[19]中,提出了一种基于抵押协议的两步法,用于在比特币系统(没有任何受信方)中实现多方竞彩,该方法还在[20](259-250页)中被用于实现随机数生成器,其工作原理如下:第一步,各合约参与方随机选取一个数字,并公布其哈希承诺值,并向托管方支付保证金。在第二步中,合约参与方公布第一步中选取的数字,随机数是由这些数字运算得到的。任何一方未能在预先约定的截止日期前披露其随机值,将会损失其支付的保证金,此保证金会被分配给遵守协议的参与方。这种方法的缺点是需要托管大额的保证金以满足安全需求,合约参与各方的需要将机会成本也考虑在内。

5. Summary

5. 总结

在Qtum平台上,数据馈送和链下计算可以通过以下两种方式实现:

1. Oracle网络协议(F.1部分)。其中,需要对数据馈送和链下计算设计安全的协议,并设置相应的激励措施对Oracle网络内的节点或实体进行奖励。从这个方面来看,我们可以使用之前提及的一些理念、方法等。

2. 智能合约协议(F.2和F.3部分)。需要对之前章节描述的关于链下计算的简单抵押方法的落地实施高度重视,并且有必要设计一种协议将数据源和区块链进行连结。

另外在任何情况下,都需要考虑将消费者(智能合约参与方)和服务提供方(Oracle,组织机构等)提供的服务(数据馈送和链下计算)纳入统一的协议中所付出的巨大努力考虑在内。

致谢:感谢BitSE 对本研究的支持
参与人员名单:
帅初(量子链创始人)
Emiliano (量子链Research team)
霍豫超(PWC 上海)

参考文献:

【1】 Vitalik Buterin, SchellingCoin: A Minimal-Trust Universal Data Feed, 2014, https://blog.ethereum.org/2014/03/28/schellingcoin-a-minimal-trust-universal-data-feed/

【2】 Paul Sztorc, Peer-to-Peer Oracle System and Prediction Marketplace, 2015, http://bitcoinhivemind.com/papers/truthcoin-whitepaper.pdf

【3】 Vitalik Buterin, Ethereum and Oracles, 2014, https://blog.ethereum.org/2014/07/22/ethereum-and-oracles/

【4】 Tal Serphos, Off-Chain Calculations for Ethereum: A Simple Mechanism for Nodes to Provide Calculation Services, 2015, https://magazine.backfeed.cc/off-chain-calculations-for-ethereum-a-simple-mechanism-for-nodes-to-provide-calculation-services/

【5】 Fan Zhang et al., Town Crier: An Authenticated Data Feed for Smart Contracts, 2016, https://eprint.iacr.org/2016/168.pdf

【6】 Thomas Bertani, Oraclize: The Provably Honest Oracle Service, 2016, http://www.oraclize.it

【7】 PriceFeed Smart Contract, 2016, http://feed.ether.camp/

【8】 V. Costan and S. Devadas, Intel SGX Explained, 2016, https://eprint.iacr.org/2016/086.pdf

【9】 E. Shi. Trusted Hardware: Life, the Composable Universe, and Everything. Talk at the DIMACS Workshop of Cryptography and Big Data, 2015

【10】 Ahmed Kosba et al., Hawk: The Blockchain Model of Cryptography and Privacy-Preserving Smart Contracts, 2016, https://www.weusecoins.com/assets/pdf/library/Hawk%20-%20The%20Blockchain%20Model%20of%20Cryptography%20and%20Privacy-Preserving%20Smart%20Contracts.pdf

【11】 Iddo Bentov and Ranjit Kumaresan, How to Use Bitcoin to Design Fair Protocols, 2014, https://eprint.iacr.org/2014/129.pdf

【12】 Marcin Andrychowicz et al., Secure Multiparty Computations on Bitcoin, 2013, https://eprint.iacr.org/2013/784.pdf

【13】 Ranjit Kumaresan and Iddo Bentov, How to Use Bitcoin to Incentivize Correct Computations, 2014, https://people.csail.mit.edu/ranjit/papers/incentives.pdf

【14】 Aggelos Kiayias, Hong-Sheng Zhou, and Vassilis Zikas, Fair and Robust Multi-party Computation Using a Global Transaction Ledger, 2016, http://link.springer.com/chapter/10.1007%2F978-3-662-49896-5_25

【15】 Guy Zyskind, Oz Nathan, Alex Pentland, Enigma: Decentralized Computation Platform with
Guaranteed Privacy, 2015, http://enigma.media.mit.edu/enigma_full.pdf

【16】 Joseph Bonneau et al., On Bitcoin as a public randomness source, 2015, https://eprint.iacr.org/2015/1015.pdf

【17】 Dennis Mckinnon et al., RANDAO, 2014, https://github.com/dennismckinnon/Ethereum-Contracts/tree/master/RANDAO

【18】 Dennis Mckinnon et al., RANDAO, 2015, https://github.com/randao/randao/blob/master/README.en.md

【19】 Marcin Andrychowicz et al., Secure multiparty computations on Bitcoin, 2014, https://eprint.iacr.org/2013/784.pdf

【20】 Arvind Narayanan et al., Bitcoin and Cryptocurrency Technologies, 2016, http://www.the-blockchain.com/docs/Princeton%20Bitcoin%20and%20Cryptocurrency%20Technologies%20Course.pdf

感谢BitSE对本研究的支持。

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。