【论文笔记17】链上还是链下?关于链外计算和数据的见解

0x00 摘要

区块链从根本上改变组织生产和获取价值的方式的潜力巨大且非常现实。处理几乎任何类型的数字资产的实际应用都证明了这种能力。基于区块链的应用程序架构受益于一组独特的属性,包括加密安全和对等记录交易的不变性和透明性,这已得到网络一致同意。然而,基于区块链的应用程序也可能会面临高昂的计算和存储费用,对整体性能和可伸缩性产生负面影响。在本文中,我们报告了从一组实验性区块链项目中吸取的经验教训和获得的见解,重点关注链外:如何将计算和数据移出链外,而不损害引入的属性和从最初使用区块链中获得的好处

0x01 Introduction

区块链是不同计算和经济概念的组合,主要包括对等网络、非对称加密、共识协议、分散存储、分散计算和智能合约,以及激励机制。这些概念的综合将区块链定位为一种新技术,同时也是一种可编程平台和网络。区块链引入了独特的属性,包括加密安全和对等记录交易的不变性和透明性,这已经得到了网络共识的同意。因此,区块链从根本上改变组织创造和获取价值的方式的潜力是巨大的——而且是非常现实的。虽然最初主要在金融服务行业进行讨论,但如今有一些实际应用涉及几乎任何类型的数字资产,从资产来源到对等电子商务。在使用区块链时,建立无信任的互动和业务脱媒仍然是主要目标。

在过去两年中,我们在柏林大学信息系统工程研究小组(Information Systems Engineering research group at TU Berlin)开展了一系列区块链项目,这些项目大多是针对特定应用挑战的实验性项目,并与行业合作伙伴合作开展。此外,我们是 从分布式系统和数据管理的角度,对区块链技术和平台进行基础研究。在这两种情况下,链上与链下的问题都是反复出现的:链上到底必须有什么,链下可以有什么,同时保留与区块链相关的整体属性和利益?

链上数据——以有序区块组织的确认交易的形式——以及链上代码——以通用图灵完整语言编写的程序的形式——需要网络对等方的验证和共识,并导致仅将更改作为共享数据存储附加到区块链中,且无法逆转。然而,事务验证、一致性协议和分散的程序执行可能会描述通信和执行开销。而且它们确实需要时间。此外,矿商(即验证交易并提出新区块的节点)通常会收取费用,从而产生财务成本。总体而言,基于区块链的系统的可伸缩性可能会受到影响。比特币目前限制每秒7笔交易;以太坊每秒的交易量限制在15次左右。此外,(公共)区块链上的任何东西都不是天生匿名的,而是故意可见的;链上交易不保证隐私和机密性。 

链外数据和计算的目标是减少或克服这些限制。通过将数据和计算从区块链的其他地方转移到另一个数据存储、服务器或第三方,区块链的“足迹”明显减少。然而,在这样做时,区块链和基于区块链的应用程序的基本属性可能会受到不同程度的损害。当使用幼稚的链外方法时,它们甚至可能被禁止使用。毕竟,系统应该保持“不可信”,即不需要明确的信任。 

在本文中,我们报告了在链外计算和数据方面获得的第一个见解。我们展示了五种链外模式,并讨论了每种模式的背景、原则思想和实现。 

0x02 Blockchains and Smart Contracts\

简言之,区块链是分布式对等系统,它实现了一个无信任的共享公共附加交易分类账[14]。 

区块链。比特币是这种系统的第一个实现,由中本聪(Satoshi Nakamoto)于2008年提出[10]。导致比特币协议诞生的目标是设计一种数字货币,它允许在不依赖可信中介的情况下完全点对点地传输数字价值。为了实现这种分散的加密货币,该系统将由非对称加密技术保护的交易与一致算法结合起来,以决定网络内的交易顺序。网络中的对等方可以通过检查加密签名来验证单个事务。然而,除此之外,还必须确定全球交易秩序,以防止(双花)双重损失数字基金的支出。为此,作为比特币系统的一项主要创新,开发了工作证明共识协议,该协议将向网络添加交易的权利分配给网络安全所需的计算工作量。为了提高效率,将多个事务分组到一个块中。然后,这些区块以协商一致的方式排序。每个区块都引用其前身,这意味着一个链数据结构——区块链。 

扩展比特币的点对点价值转移理念,以太坊,一种无需信任的计算平台,于 2014 年提出 [9,16]。以太坊为区块链理念添加了一种图灵完备和有状态的编程语言,它可以在不信任服务器或中央方的情况下执行复杂的代码。通过验证网络中每个对等点上的每个程序执行并就结果达成一致来取代信任。

智能合约。这些在网络中以去信任和防篡改的方式执行的程序被称为智能合约。请注意,智能合约需要具有确定性,否则同行可能会对有效执行的结果产生不同意见。因此,例如,不允许文件系统和网络访问。虽然该术语可能暗示与法律合约的密切联系,但智能合约具有更广泛的用例,可以应用于需要自动执行复杂条件逻辑的地方。因此,它们可以被想象为自我执行的自治代理。

0x03 对脱链计算和数据的需求

在过去的两年中,我们在基于区块链的应用程序原型的概念验证实施中获得了丰富的经验。我们通过讨论其中两个应用程序的示例性挑战来激发脱链洞察力。虽然柏林工业大学开发的所有原型都在以太坊平台 [9] 上实现,但我们认为我们的发现代表了当今所有公共区块链的实施。

作为第一个应用程序,我们在以太坊平台 [1] 上创建了一个公平且抗操纵的国际象棋游戏。

今天,在线游戏依赖于一个值得信赖的中介来运行游戏并确保玩家遵守规则。但是,需要信任该中介不会欺骗或窃取资金。为了消除这种信任,我们实现了国际象棋逻辑以及将游戏状态保存在智能合约中所需的数据结构。从概念上讲,这已经解决了问题:玩家将移动发送到合约,它会修改内部持久的游戏状态以获取有效移动。有效移动后,合约会检查结束游戏条件,如果满足条件,则支付获胜者。然而,检查最终游戏条件的计算成本很高必须计算和验证所有潜在的移动以检查检查配合条件。这在智能合约中是不可能的,因为它违反了链上交易的复杂性上限

从中可以学到三件事:

1. 我们需要找到一种方法来在客户端执行最终游戏检查链,而不影响区块链的去信任属性。

2. 由于计算需要付费,因此应尽可能少地执行游戏结束检查。因此,就像在物理国际象棋游戏中一样,我们应该让玩家触发检查,而不是在每次有效移动后进行检查。换句话说,我们应该将部分控制流转移到客户端。

3. 在创建应用程序时,我们必须期望达到区块链的可扩展性极限。这强调了研究和开发脱链技术的必要性。

另一个更复杂的概念验证是去中心化的服务市场,它可以在服务 API 的提供者和消费者之间实现去信任的去中介化。使用加密货币进行支付,消费者可以在不涉及市场中介的情况下购买对市场上提供的服务的时间限制访问。特别是作为服务市场的主要组成部分之一的服务发现,在完全分散的设计中提出了一个巨大的挑战:由于点对点网络中的完全复制,区块链上的数据存储非常昂贵。尽管如此,有意义的服务发现功能需要存储 API 描述。简单地指向智能合约的链下引用,例如,托管在云存储系统中的文件,是链上存储的替代品。这种方法将引入对存储系统的信任,因为存储的数据可能会更改,而引用保持不变。此外,由于区块链中的所有数据都存储在网络中的每个节点上,因此它是公开可见的。服务提供商没有明显的方法可以向公众隐藏他的一些服务描述。

作为这种公开可见性的直接后果,没有办法在不公开私有数据的情况下对链上的私有数据执行计算。假设消费者想要向提供者证明他可以访问另一个提供者的 API。第二个提供者可以公开提供所有可以访问他的服务的令牌的哈希值。然后,消费者可以简单地散列他的私人访问令牌并将散列显示给第一个提供者,后者可以通过将其与已发布的散列进行比较来验证它。然而,为了做到不信任,消费者需要在链上执行散列操作,并以此揭示他的私人代币。简单地计算链下散列不会向提供者证明任何事情。

同样,我们从这些发现中得出三个挑战:

1. 我们需要找到一种在不放弃其抗操纵性的情况下将数据存储在链外的方法。

2. 由于所有链上数据都是公开可见的,因此应开发去信任但保护隐私的链下存储技术。

3. 私有数据的链下计算可以在链上验证而不泄露所述数据,这将增加可能的用例集。

总之,需要链下策略来解决链上计算和存储的功能限制和高成本问题。

0x04 脱链模式

我们现在介绍一组已识别的脱链模式,它们可以单独使用或组合使用,以将计算和数据移出区块链。每种模式都旨在维护区块链的关键属性,并包括确保它们不会受到不必要程度的损害的技术。

4.1 挑战响应模式

  背景:智能合约对具有明确定义的最终状态的状态机进行建模。状态转换的计算成本很低,但检查给定状态是否为最终状态是昂贵的。

解决方案:

其他客户端可以通过提供有效的状态转换来证明声明错误。使用这种模式,计算永远不必在链上执行(图 1)。

 示例:国际象棋的最终游戏条件太昂贵而无法在链上检查。然而,玩家可以很容易地检查链下的情况。因此,玩家无需在智能合约中检查最终游戏条件,而是简单地声称检查伙伴。如果声称是错误的,他的对手可以简单地通过提交一个有效的动作来证明他是错误的。如果声称是真实的并且对手无法提交有效的移动,则获胜者将被支付。图 2 概述了国际象棋的完整挑战响应协议,还考虑了平局和超时。更详细的描述,我们参考[1,2]。

讨论:这种模式允许在智能合约充当状态机的场景中有效地脱链计算。由于它允许将复杂的操作完全移出链外,并规避了链上交易的复杂性上限,因此它可以扩展可能用例,并有可能节省成本。但请注意,该模式增加了链上交易的总量,这需要仔细计算成本。此外,还需要提高参与实施该模式的智能合约的各方的可用性,因为使用超时对于确保进度至关重要。

 实施:这种模式不需要除了智能合约之外的其他技术。有关此模式的示例性实现,请参阅 [2]。

4.2 链下签名模式

上下文:两个网络参与者知道他们将在未来执行一组交易。他们想降低这些交易的成本,或者想对其他网络参与者隐藏它们。

解决方案:两个参与者一起指定一个包含函数的智能合约,该函数将作为参数给出的外部状态应用于合约状态。此功能包括签名检查,以确保两个参与者都同意状态更改。只有当两个参与者的有效签名都提供了请求的新状态时,才会应用新状态。该合约被部署到区块链上,并且两个参与者都可以选择存款。然后,参与者在不涉及区块链的情况下执行纯粹的脱链和点对点交易:一个参与者计算一个新状态,将其包装在交易中,对其进行签名并将其发送给他的对手。然后接收者检查新状态,在他同意的情况下签署交易并将其发送回发送者。该交易由双方签署,现在可以由参与者在任何时间点发送到智能合约。在验证两个签名后,合约会相应地更新其状态。

示例:参与者 A 和 B 创建具有签名锁定状态更新功能的智能合约,并分别存入 50 个单位的加密货币。现在,A 想要将 10 个单位转移给 B。为此,她在本地创建了一个交易,其中包括 A 和 B 的余额分别为 40 和 60 的新状态。她签名并将其发送给 B,B 也签名.现在,B 可以使用该交易随时更新链上余额。但是,A 和 B 可以进行进一步的链下价值转移,而无需在链上进行结算,除非一方的存款用完。这种链下价值转移模式的应用通常被称为支付渠道。

讨论:这种模式允许高效的链下交易,而不会将信任引入系统。核心观点是,能够解决交易的保证与实际在链上执行交易一样好。签署新状态类似于在传统金融交易中写支票。使用链下交易可以节省大量成本,因为交易费用仅适用于链上结算。此外,该模式可以增强隐私和机密性,因为除了最终结算之外的所有交易都对网络隐藏。从区块链网络的角度来看,这种模式有助于减轻系统的负载,从而增强可扩展性。

除了简单的价值转移之外,还有许多其他应用。如图 3 所示,我们能够通过使用这种模式将国际象棋游戏的核心部分移出链下。这不仅有助于降低游戏成本,还有助于消除对块间隔的时间依赖性。

由于在大多数情况下需要向智能合约进行初始存款,因此与许多同行建立合约可以锁定大量资金。此外,恶意参与者可以通过拒绝签名来冻结资金。因此,合约应指定触发自动结算的超时。

由于在大多数情况下需要向智能合约进行初始存款,因此与许多同行建立合约可以锁定大量资金。此外,恶意参与者可以通过拒绝签名来冻结资金。因此,合约应指定触发自动结算的超时。

实施:除了链上智能合约外,这种模式还需要一个点对点的通信渠道来交换已签署的链下交易。例如,在以太坊生态系统中,耳语消息协议【4】 (Whisper Messaging Protocol )能被使用。有多种努力可以利用这种模式为现有区块链构建链下价值转移网络:闪电网络 [12] 为比特币生态系统提供了实现,而 Raiden [5] 则针对以太坊网络。

4.3 内容可寻址存储模式

背景:大量数据与智能合约相关联。链上存储太贵了。

解决方案:将数据链下存储在内容可寻址存储系统中,并将引用存储在智能合约中。使用智能合约的客户端可以检索参考并基于该参考检索数据。然后,他们可以通过从自身重新计算其地址并将其与存储在智能合约中的引用进行比较来验证数据的正确性。

示例:智能合约对一件数字艺术品的所有权进行编码。然而,一件艺术品由于其大小而在链上存储会非常昂贵。为了解决这个问题,描述被存储在一个内容可寻址存储系统中,该系统通过它们的哈希值来存储文件。文件哈希也存储在智能合约中,作为艺术品的参考。然后,客户可以从合约中检索外部存储的艺术品的哈希值,并使用它来查询存储系统。然后可以简单地对结果进行散列以验证其正确性(图 4)。

讨论:这种模式允许将数据不信任地外包到链下存储系统,因为数据的修改会立即更改其地址并使其引用无效。 

通过应用该模式,应用程序的存储成本可以大大降低,并且最初无法存储在链上的文件现在可以在不引入信任的情况下被引用。此外,由于数据检索是在客户端从外部存储系统完成的,因此可以通过向该系统添加访问控制来实现隐私功能。但是,这需要根据用例仔细考虑,因为泄漏的数据可以通过重新计算其地址来立即确认是真实的。

虽然不在此模式的范围内,但所需的外部内容可寻址存储系统本身必须可靠且可用。在不可用或数据丢失的情况下,应用程序的基于区块链的部分也可能变得不可用。

将来,这种模式可以扩展到支持对存储在链下的数据的去信任计算:首先,可以将智能合约引用的内容寻址数据发送到合约。然后,可以在链上验证完整性。如果成功,智能合约可以修改数据,更新对新数据的引用并将其写入事件。然后,不受信任的外部工作人员可以将该数据写回从中检索输入的内容可寻址存储系统。虽然理论上很有趣,但我们还没有观察到这种扩展。因此,它不是模式的一部分。

实施:如前所述,内容可寻址存储系统需要与智能合约一起工作。星际文件系统 (IPFS) [7] 和 Swarm [15] 是两种这样的技术,它们通过哈希处理数据并试图确保可用性和持久性。

4.4 委托计算模式

背景:(a)参与区块链网络的节点想要证明其私有数据的属性而不发布它。 (b) 节点想要执行过于复杂而无法在链上执行的计算。

解决方案:将计算外包给不受信任的第三方,除结果外,还要生成正确执行的证明。与其执行计算本身,不如验证链上正确执行的证明(图 5)。

示例:有一个 ID 卡信息哈希的链上列表,指的是被允许调用智能合约函数的人。现在,列出的任何人都可以证明他有一张身份证,该身份证授权他通过在本地散列他的卡信息并提供包括正确性证明在内的结果来调用合约功能。证明不需要透露卡上的任何信息。

讨论:这种模式允许将计算的无信任外包给不受信任的各方。第三方,也称为证明者,不必透露任何私人输入或证明创建的中间结果。唯一泄露的信息是证明者知道正确计算输出所需的所有信息。为此,可以使用非交互式零知识证明,更具体地说是零知识简洁非交互式知识论证(zkSNARKs)[8,11]。

与区块链上的常规计算不同,这种模式允许脱链计算隐藏执行期间使用的信息。因此,不必公开信息而是计算结果极大地增强了隐私。此外,可以以验证成本独立于链下计算的复杂性的方式设计证明。因此,在达到复杂度阈值后,计算的链上验证比其链上执行更便宜。这个结果可以用来增加区块链的吞吐量。即使超过链上计算复杂度限制的操作仍然可以使用这种模式在链外执行。

最先进的非交互式零知识证明需要在生成证明之前执行可信设置阶段。根据用例的不同,这可能会在整个系统中引入不受欢迎的信任。此外,计算的证明生成会导致其不可验证执行的开销。然而,既没有用于方便地规范链下计算的高级语言,也没有用于简单的链上证明验证的工具。因此,虽然功能强大并且已经在实践中使用,但这种模式目前仅应用于相当特定的场景,例如 zCash,这是一个基于比特币的区块链,它实现了隐私保护交易 [6,13]。

实施:为了验证智能合约的链下计算,底层区块链需要支持检查证明所需的操作。这些可以是特定于用例的,也可以是可用于验证任何证明的通用构建块。虽然 zCash 直接将其特定计算的验证逻辑添加到其协议中,但以太坊计划添加操作以支持使用以太坊改进提案 196 和 197 [3] 验证任意 zkSNARK。

4.5 低合约足迹模式

背景:更改智能合约的状态需要进行链上交易。为了激励网络处理交易,必须支付费用。该费用取决于所调用的智能合约功能的复杂性及其对存储的使用。

解决方案:为了优化费用,合约的设计应尽量减少链上交易的数量和规模。可以使用以下两种技术来减少占用空间。

– 不要在状态改变后检查链上的条件。让节点在本地执行条件检查,并在成功的情况下触发链上检查。

– 优化写入,而不是读取。从智能合约中读取是本地链下操作,不需要链上交易。最大限度地减少写入并存储没有冗余的信息。在读取期间本地计算派生数据。

示例:

– 在服务市场应用程序中,服务提供商需要确保在消费者支付的时间段结束后将消费者从链上授权列表中删除。他没有定期触发条件检查或将条件检查链接到另一个合约功能并冒着频繁重新评估的风险,而是在本地跟踪访问周期并在它过去后触发链上检查。这将链上评估的数量减少到一个。

– 如果服务提供者想知道当前订阅了他的服务的客户数量,他不应该在智能合约中添加计数器。他可以随时从授权列表中本地计算该号码。这节省了存储空间和计数器更新操作。

讨论:这种模式最初可能看起来不像是一种脱链方法,因为它没有明确地将某些东西从链中取出。但是,它首先会阻止信息在链上存储或处理。因此,这可能是最不明显,但最常用和最直观的脱链模式。

实施:除了智能合约之外,不需要额外的组件或技术来实施这种模式。

0x05  总结与展望

在本文中,我们提出了对链下方法的需求,以克服当今区块链实施中的限制,甚至更多地扩展其功能并降低使用成本。在根据我们实施多个基于区块链的应用程序的经验得出关键挑战后,我们提出了五种脱链模式,用于将计算和数据移出区块链,同时不损害重要的区块链属性,特别是去信任属性。

我们期望区块链系统在未来通过组合和实施新的共识算法、分片或同态加密等想法,在可扩展性和隐私方面进一步成熟和改进。然而,我们仍然认为脱链技术是基于区块链的应用程序工程中的关键工具,因为它们引入了额外的功能和潜在的显着成本效益。

 

猜你喜欢

转载自blog.csdn.net/weixin_40889839/article/details/124270943
今日推荐