5.2 区块链可扩展性解决方案 - JoanJiao/TokenEconomyBook_Chinese GitHub Wiki

像工作量证明这样的分布式共识的最大挑战之一是,虽然它保证了网络安全,但它不能很好地扩展。这是由于去中心化、安全性和可扩展性之间的权衡导致的。

免责声明:围绕可扩展性解决方案的研究和开发受当前事件的影响。本章将给出一个总体概述,但到目前为止还没有完整地概述所有可能的解决方案和/或它们的权衡。

“可扩展性三难困境”描述了分布式共识在去中心化、安全性和可扩展性之间的权衡。去中心化是分布式网络的前提,当网络涉及一组不受信任的参与者时,安全性是最重要的方面,而可扩展性是指系统每秒可以处理的交易数量。为了允许高度包含计算上较弱的节点,工作量证明网络中的区块大小是有限的,并且区块的创建有延迟。否则,由于较大的区块更难处理,网络延迟会阻止较弱的节点参与区块创建过程。然而,这些限制减少了在给定时间范围内可以验证的交易数量,因此,工作量证明机制是安全的,但不能很好地扩展。在区块链网络的早期,开发者社区几乎没有解决可扩展性问题,因为这些网络中的流量仍然很低。今天,公共区块链网络的可扩展性是大规模采用的主要瓶颈之一,也是研发方面最受关注的问题之一。

区块链的可扩展性可与互联网的早期相媲美,我们过去常常将电话线穿过我们的公寓,以便将我们的计算机与互联网连接起来。每次连接的时候,由于带宽低,通信慢,我们必须等待页面逐个像素地构建。56k 调制解调器的引入被认为是对 28k 调制解调器的重大改进,但当时视频流还是一个遥远的梦想。虽然数据吞吐量是一个问题,但这些问题最终都得到了解决,它们当然并没有阻止 Internet 发展到今天的样子。在区块链网络的背景下,已经有人提出了许多解决方案来使得交易更快、更便宜,同时保持安全性和一定程度的去中心化。可扩展性解决方案可以在 (i) 协议级别或 (ii) 第二层级别解决这些问题。

当它们在协议级别得到解决时,通常会导致集中化。每秒更多的交易量通常需要授予某些节点更多的权力,从而提高了中心化水平。替代共识机制试图通过引入某种许可层来保证信任从而解决可扩展性问题。本书第一部分中的“比特币、区块链和其他分布式账本”一节有一个完整的小结,专门介绍了一系列替代的分布式账本解决方案和共识协议,这些解决方案和其他协议试图解决吞吐量问题。最流行的实现更高水平吞吐量的解决方案是例如委托权益证明 (dPoS)、实用拜占庭容错 (pBFT) 或许可网络等替代共识协议。其他解决协议级别可扩展性问题的方法还包括账本分片或替代加密算法,本章将对此进行介绍。

作为替代方案,很多人已经努力将可扩展性解决方案转移到了第二层,例如“侧链”或“状态通道”。在这两种情况下,用户交互都从区块链层转移到第二层,同时保证参与者之间的无风险 P2P 交易。

状态通道(State Channels)

状态通道在区块链网络之上提供了第二层,允许可能发生在链上的交易在链下得到解决,同时保持所有网络参与者的安全。在这个过程中,交易结算被外包给一个私有的状态通道,可以说是两个用户之间的双向通道。这些状态通道由智能合约正式化和处理。“状态通道”允许为任何类型的去中心化应用程序传输任何状态。“支付通道”只允许转账支付。如果 Alice 和 Bob 两方具有持续的业务关系并具有持续的来回付款,则这个通道就很有用。

在发生争议时,作为一种安全机制,代币会被暂时锁定:(i) 代币可以使用状态通道从 Alice 发送给 Bob,反之亦然,通过多重签名方案或预定义的智能合约将它们锁定一段时间。 (ii) Alice 和 Bob 都用他们的私钥签署每笔交易,但交易是保密的,不会广播到区块链网络。(iii) 期限过后,所有双边交易的余额被广播到区块链网络,从而关闭状态通道。

假设 Alice 有 200 ETH,Bob 有 100 ETH。在一定时间内,Alice 发送了 10 次 10 ETH 的付款,Bob 发送了两次 25 ETH 的付款。如果所有交易都直接在以太坊网络上结算,则网络中的所有节点将注册十二个单独的交易。这不仅会增加交易数量并减慢网络速度,而且对 Alice 和 Bob 来说成本也很高,因为每笔交易都会产生交易费用。使用状态通道来结算此类双边交易,一旦经过预先定义的时间,只需将所有交易的余额直接结算到区块链上。这意味着只有两个交易将被网络注册:通道的打开和关闭交易(opening and closing transaction)。

将交易保持在链外且仅在双方之间进行不仅更便宜、更快捷,而且还能更好地保护隐私。一切都发生在一个通道内,而不是在整个网络上公开广播。唯一在链上注册且对公众可见的交易是打开和关闭交易。这个过程的缺点是:状态通道需要所有参与者的完全有空(available)。否则,如果通道的最终关闭以及状态的最终提交是由不良行为者提交的,则代币可能会面临风险。为了对恶意攻击提出异议,智能合约可以扣留锁定的代币以惩罚恶意行为者。这需要监控,并且可以外包给服务提供商,即所谓的法官合同,以换取费用。因此,状态通道仅在参与者长时间交换许多状态更新的情况下才有用,以减轻创建通道和部署法官合约的初始成本。

用于锁定状态的智能合约必须提前知道给定通道的参与者。状态通道与一组已定义的参与者配合良好,但添加和删除参与者需要更改智能合约或创建新通道。闪电网络(比特币)或雷电网络(以太坊)等项目已经提出了基于参与者网格的解决方案,从所有通道中创建一个网络,这样就不必为每个新参与者创建一个新通道。交易现在可以通过其他人的通道进行路由,但前提是网络上有一些直接的通道连接。以下是针对具有不同成熟度和成功程度的各种区块链网络状态通道解决方案的精选列表:“Celer”、“Counterfactual”、“Fun Fair”、“Liquidity”、“Lightning”、“Machinomy”、“Perun”、“Raiden”、“Spankchain” 以及 “Trinity”。大多数解决方案专门针对一个区块链网络——例如比特币、以太坊或 Neo——而与其他区块链网络无关。

图 5.1 状态通道

侧链(Sidechains)

侧链是独立的区块链网络,与主链兼容。侧链有自己的共识机制、自己的安全级别和自己的代币。侧链不一定是公开的,也可以是私人管理的账本。如果侧链网络的安全性受到损害,损害不会影响主链或其他侧链。两个网络通过“双向挂钩”相互链接,可以转移任何状态。这样,代币可以在主链和侧链之间以预定的速率进行交换。主链保证整体安全性和争议解决,外包给侧链的交易可以牺牲去中心化来换取可扩展性。与状态通道不同,发生在侧链上的交易在交易参与者之间不是私密的。它们发布在侧链网络上,因此任何有权访问账本的人都可以看到它们。 Alice 和 Bob 不必一直都有空,添加或删除参与者也没有额外的管理成本。然而,建立一个侧链是一项巨大的工作,因为这意味着从头开始构建一个完整的基础设施。

侧链与主链上的计算层交互,需要锁定代币以方便解决争议。一组服务器(联合)在主链及其侧链之间进行调解,并确定用户使用的代币何时被锁定和释放。这在主链和侧链之间增加了另一个安全层。联盟由侧链开发者选择。然而,这样的联盟在主链和侧链之间增加了另一层,并可能引入更多的攻击向量。以下是针对具有不同成熟度和成功程度的各种区块链网络的精选侧链解决方案列表:“Bitcoin Codex”、 “Bitcoin Extended”、 “Elements Projects”、 “Hivemind”、 “Loom”、“Liquid”、 “Mimblewimble”, “Plasma”、 “Poa Network” 以及 “Rootstock”。

图 5.2 侧链

区块链互操作性

区块链网络和其他分布式账本的数量正在增长。然而,所有这些分布式账本系统在大多数情况下都是孤立的系统,以一个孤岛的形式在运行。一个网络不知道其他网络中管理的代币状态。它们也不知道其他网络是否有闲置的能力来结算交易。侧链可以被视为实现完全区块链互操作性和可扩展性的第一步。互操作性网络(例如 “Cosmos”、 “Polkadot” 或 “Wanchain”)可以提供更有效和全球性的解决方案,可以同时解决多个网络的可扩展性问题。在分布式账本的背景下,互操作性是指跨不同网络自由共享代币和相关数据的能力。在完全可互操作的环境中,来自网络 A 的用户可以向网络 B 上的另一个用户发送代币,而无需像中心化交易所那样的中介。区块链互操作性可以避免某些人担心的因为网络效应而导致的赢家通吃现象,因为如果没有互操作性,从长远来看,只有一个区块链网络能够生存。“一条链统治一切”的思想与去中心化的核心思想背道而驰。因此,Web3 的未来可能取决于区块链网络相互交互的能力。

分片(Sharding)

一些开发人员提出,对网络状态进行分片可以解决区块链网络的可扩展性问题。分片是从分布式数据库中采用的概念,尚未在区块链网络的背景下在全球范围内进行测试。分片可以解决当前共识协议的可扩展性限制,其中每个节点必须定期更新其账本并维护从创世区块到现在的完整历史记录。建议可以将账本历史分成单独的部分,每个部分都有自己的网络状态“分片”。由不同网络节点维护的多个分片相互平行,从而提高整体网络的可扩展性。作为整个网络状态的一部分,分片将是“子状态”。整个网络仍应在单一状态下运行,但每个分片本身必须保持一致。跨分片通信将通过协议规则处理。在这样的过程中,区块链地址、余额和一般状态将包含在分片中。分片向主链提供证明,并可以通过分片协议与其他分片进行通信。致力于分片解决方案的示例项目包括:“Prysmatic Labs”、 “Drops of Diamond”、 “Status” 和 “PegaSys”。

替代的加密算法

比特币网络和类似网络的最大挑战之一是对未使用(unspend)的交易的管理。这些未使用的交易会造成账本的指数级增长。例如,在比特币中,它们被称为 UTXO,会提高有效负载、导致更昂贵的交易和更低的每秒吞吐量。当一个新的原始交易被创建并随后被验证时,在签名之前,输入只能来自以前交易的未使用输出(the inputs can only come from unspent outputs of former transactions)。因此,对于交易创建验证和签名,未使用的交易比已使用的交易(输出)更重要。为了保证账本的一致性,未使用的交易对于时间戳、存在证明、数据存储以及区块创建和挖掘等事情都很重要。面向交易的区块链网络都是关于未使用的交易。这就是为什么账本膨胀与它们密切相关。管理 UTXO 的有效负载大小、账本上的 UTXO 数量以及将它们保持在链外的程度可以抑制链的膨胀。事实上,所有使有效载荷更小的东西都能解决膨胀问题。集体签名中使用的替代加密算法,如多重签名、环签名、阈值签名或 Schnorr 签名,可以解决某些可扩展性问题,例如,通过减少添加到账本的信息,或使用多重签名和赎回脚本(redeem scripts)来消除这些信息。再如,对于多重签名交易,接收方地址被聚合到一个多重签名接收方地址中,并使得随附的赎回脚本离线存储。它还减少了交易中的输出数量和脚本大小。环签名、阈值签名和集体签名( collective signatures)也是如此。多重签名被分成资金交易,资金交易变成 UTXO 和支出交易(spending transaction),并产生已花费交易(spent transaction)。对于与 UTXO 相关的资金交易,将多个接收者聚合到一个接收地址中并使用更少的输出,加上脱链赎回脚本,通常会带来更小的有效负载。替代签名方案属于抗膨胀工具集,但与一般的非多重签名交易相比,并非总能带来有效负载的减少,要取决于具体的用例。例如,“Mimblewimble” 是关于使用不同方法构建交易的提议。它删除了大多数历史区块链数据,包括已用的交易输出,同时仍然允许用户完全验证链。它还实现了比当前比特币更多的隐私。“Dfinity” 和 “Hyperledger Fabric”使用阈值签名来实现相同的目标。

章节引用和延伸阅读