公链的扩容挑战 深度分析以太坊第二层扩容方案
2023-11-27
对于以太坊来说,2018年是它的底层架构之年。很多早期参与者会在今年测试网络的极限,将重心放到对以太坊的扩容上。
以太坊现在仍然还处在初期阶段。直到现在,它也没有那么安全或者可扩容化。对于任何与以太坊近距离工作的人来说,这都是很好理解的。但是就在去年,ico的推动目前已经开始对以太坊目前的网络造成了很大的压力。以太坊的承诺和web3,一个安全,易用的去中心化网络,整合常用的经济协议,并且被10亿级别人来使用,这个概念还没有落地,而且在正确的底层架构完成之前也不会实现。
那些正在为以太坊的底层架构以及扩大它能力的项目被称为扩容解决方案。这些方案有很多中形式,通常来说都是互相兼容的。
在此文中,我想深入分析下某种扩容解决方案,“链下”或者说“2层”解决方案。
首先,我们来总体讨论下以太坊(或者说所有公链)的扩容挑战性。
其次,我们会讨论解决这些扩容挑战的不同方式,并且会区分“1层”和“2层”解决方案。
第三,我们会专注于2层解决方案并且解释它是如何工作的,尤其,我们会讨论状态通道,Plasma和Truebit。
此文主要专注于让读者能够对于2层解决方案如何工作有一个完整以及细节的理解。但是我们不会讨论代码和具体的实施。而且,我们会专注于理解用来打造这些系统的经济机制,还有分享一些在所有2层扩容技术中的共识。
公链的扩容挑战
首先,理解“扩容”并不是一个单一,特定的问题是非常重要的。它指的是对于以太坊来说必须要解决的挑战,从而以太坊才能被全球几十亿人使用。
最常见的扩容挑战是转账吞吐量问题。目前,以太坊每秒大约可以处理15笔转账,但是相比Visa,它大约每秒可以处理45,000笔转账。去年,一些应用例如以太猫,或者现在出现的ICO,都足够能让以太坊网络“降速”并且转账费用也会提高。
像以太坊这种公链的主要限制在于每笔转账都需要被网络中的每个节点处理。以太坊区块链上的每个操作,比如某个转账,以太猫出生,新的ERC20合约实施,都需要通过网络中所有的节点来进行。这是设计原理决定的,因为保证公链权威的一部分原因。节点们不用依赖任何其他人来告诉他们,区块链现在的状态是什么,他们自己能够辨别。
这就从根本上给以太坊网络的转账吞吐量造成了限制:它不能比我们从单个节点处获得的速度更快。
我们可以让网络中每个节点去承担更多工作。如果我们加倍区块的大小(也就是区块的燃料极限),也就是说每个节点在处理每个区块的时候大约要做双倍的工作量。但是这就带来了去中心化的费用问题:节点需要做更多工作意味着低能力的计算机(例如消费电子品)可能就没办法在网络中工作,如果算力集中在高能力计算机中,挖矿就变得非常中心化。
并且,我们需要找到让区块链能够在不提高单个节点工作量的情况下,负担更多工作量的方法。
从理论上说,有两种方法可以解决这个问题:
如果每个节点不用同步处理某项操作会怎么样?
第一种方法和我们的初始想法不同,如果我们打造一个区块链,其中每个节点不需要都去处理每笔交易会怎么样?如果网络被分成2部分,他们还可以半自动化的进行操作,又会怎么样?
A部分可以处理一批交易,同时B部分可以处理另一批交易。这样就可以有效地加倍区块链的吞吐量,因为现在处理的极限就是2个同时可以达到的。如果我们将区块链分为很多不同的部分,那么我们就可以把区块链的吞吐量提高多少倍。
这就是“分片”技术的想法,这是由Vitalik的以太坊研究团队和其他人提出的扩容解决方案。区块链被分成很多部分成为分片,每个片区都可以独立地处理交易。分片通常被认为是1层扩容技术因为这是在以太坊底层协议上进行的。
如果在以太坊可以处理交易能力之外去进行更多有效操作会怎么样?
这个观点从反方向进行考虑:不如去提高以太坊区块链本身的能力,如果我们可以利用现有的能力做更多事情会怎么样呢?底层以太坊区块链的吞吐量是一样的,但是实际上我们其实可以做更多对于人们和应用软件有用的操作,例如转账,游戏中的状态更新,或是简单的计算。
这就是类似状态通道,Plasma和Truebit等技术使用的“链下”技术。当然,这些技术都在解决不同的问题,他们都是通过“链下”,而不是在以太坊区块链上进行操作,同时也能保证足够的安全和结果。
这些也被称为2层解决方案,因为它们是是基于以太坊主网的其他链进行的。他们不会对底层协议进行更改,他们就是基于以太坊的智能合约,同时和链下的软件进行交互。
第2层扩容解决方案是加密经济解决方案
在深入了解具体的2层扩容解决方案,了解使得他们可行的底层概念就非常重要。
支撑公有链最基础的能量就是数字经济共识。通过仔细协调激励以及通过软件和加密算法来对他们进行保障,我们就可以创造计算机网络,并且对于系统内部状态可以达成可靠地共识。这就是中本聪白皮书中的主要想法,而且现在这也被应用在不同公链的设计中,包括比特币和以太坊。
数字经济共识让我们获得核心主链,除非有极端事件例如51%攻击发生,我们知道链上操作- 例如支付或者智能合约,会根据写入的代码进行执行。
在2层解决方案背后的想法,就是我们可以把核心主链作为锚定,作为一个固定点,我们可以在其上添加经济机制。第二层的经济机制可以扩大公链的使用性,让我们能够在区块链下进行交互,如果有需要,也可以按照主链为准。
这些区块链层是基于以太坊的,不会总是和主链操作有同样的保证。但是他们仍然可以很安全地使用,特别是虽然对于最终结算能力有所减弱,但是可以让我们处理交易更快并且费用还更低。
数字经济并不是跟着中本聪白皮书开始和结束,它只是一种我们正在学着使用的技术。不只是对于核心协议的设计,但是对于第二层协议的设计,其实是扩大了底层区块链的性能。
状态通道
状态通道是为了能够在“链下”进行转账和其他状态更新的技术。但是,状态通道内部发生的交易仍然保持着非常高程度的安全和不可改变性:如果出现错误,我们仍然会追溯回链上交易。
大多数读者对支付通道的概念很熟悉,这已经提出有好几年了,并且最近也通过闪电网络在比特币上进行部署。状态通道比支付通道更加宽泛,他们不止是可以用于支付,而且可以用于区块链上任意的“状态更新”,就好像在一个智能合约内部进行改变。状态通道是在2015年由Jeff Coleman首次提出细节的。
解释状态通道最好的方法就是举例。请记住这是概念解释,意味着我们不会对特定的实施进行非常技术细节的解释。
假设Alice和Bob想要玩井字棋游戏,获胜者会获得1eth。比较单纯的做法是在以太坊上建立智能合约并且将游戏的规则部署在合约上,并且追踪每个选手。每次某个选手想要移动,他们会将交易发送到智能合约上。当一个选手赢得胜利,根据规则上定义的那样,合约会为获胜者支付1eth。
这样做或许可以,但是不会很有效率,还会比较慢。Alice和Bob会让整个以太坊网络都在处理他们的游戏,对于他们玩游戏所需要的,这明显有些过度了。他们在每次移动棋的时候,都需要支付燃料费用,而且在做出下个移动的时候,他们需要等区块被挖出。
但是,我们可以设计一个系统,其中让Alice和Bob能够在尽量少的链上操作的前提下,来玩这个游戏。Alice和Bob可以在链下更新游戏的状态,但是他们对于计算结果也非常有信心,因为如果有必要,他们可以返回到以太坊主网进行验证。我们把这个系统成为“状态通道”。
首先,我们需要在以太坊主链上创立一个智能合约“仲裁”,他能够理解这个游戏的规则,并且将Alice和Bob定义为游戏中的两个玩家。这个合约需要持有那1eth的奖励。
然后,Alice和Bob就要开始游戏。Alice会创建并且签署一个交易,其中描述了她的第一步棋,然后发送给Bob,Bob也需要签署这个交易,并且传回签名完成的版本,他自己也需要留个备份。然后Bob创建并且签署一个交易,其中描述了他的第一步,然后发送给Alice,Alice也会签名,然后发回,并留下备份。每次,他们都会更新游戏的当前状态。每个交易都包括一个“nonce”,这样地话,过后我们就可以证明这些确实发生了。
目前,链上还什么都没有发生。Alice和Bob通过互联网将交易互相传送,但是还没有接触到区块链。但是,所有的交易都会发生给仲裁合约,换句话说,他们都是有效的以太坊转账。你可以认为这就像2个人在互相写一堆区块链认证的支票。其实没有钱从银行存入和取出,但是每个人都有一堆支票,他们可以在任何时候存钱。
当Alice和Bob的游戏结束,也许因为Alice已经赢了,他们可以通过像仲裁合约提交最终状态,从而关闭通道(例如,交易清单),而且只需要支付单个交易费用。仲裁确认这是双方签署的“最终状态”,最后等待一段时间来确保没有开源合法地改变结果,然后给Alice那1eth的奖励。
为什么在仲裁合约等待的时候,我们需要“挑战时间”?
假设除了像仲裁发送真实的最终状态,Bob发出了一个旧版本的状态,里面写着他赢了Alice。但是仲裁只是个合约,凭他自己,是没有办法知道这不是最近的状态。
这个挑战时间就给了Alice一个机会来给仲裁合约证明Bob对游戏的最终状态撒谎了。如果有更接近的状态,那么她就可以拿到签字交易的副本,并且她会上交这些给仲裁。仲裁就会通过检查nonce,告知Alice的版本才是更接近的,并且Bob想要盗取胜利的想法也会被拒绝。
未来和局限
状态通道在很多情况下都很有用,对于链上操作来说是一次非常大的提升。可是,也需要记住很重要地事情,那就是为了使用状态通道,我们也作出了特别的权衡取舍。
状态通道依赖于可用性。如果Alice在问题挑战过程中断开了网络连接(也许因为Bob想要拿奖励,就切断了她家的网络连接)那么她或许就不能在挑战时间内完成回复。但是,Alice可以支付给其他人费用来持有她状态的副本,并且代替她来保持网络可用。
状态通道对于用户在长时间内进行多次状态更新来说特别有用。因为在部署仲裁合约,并且建立通道的时候,会有初始费用。但是一旦部署,通道内每次状态的更新,所需的费用都很低。
状态通道最好用在定义好的用户之间。因为仲裁合约必须总是知道参与者(也就是,地址),这是给定通道的一部分。我们可以添加和移除用户,但是每次都需要对合约进行更改。
状态通道有很强的隐私特性,因为任何事情都在通道内部的用户之间发生的,而不是公开广播,并且记录在链上。只有打开和关闭交易是需要公开的。
状态通道有即时的结果,意味着只要双方签署了状态更新,这就被认为是最终。双方都会有非常强的保障,如果有必要,他们可以强迫改变链上的状态。
Plasma
在2017年8月11日,Vitalik Buterin和Joseph Poon发布了一篇名为Plasma的白皮书:自动化的智能合约。白皮书介绍了能够让以太坊每秒进行比现在多很多的转账。
类似状态通道,Plasma也是进行链下转账的技术,并且依赖于以太坊区块链的安全性。但是Plasma将这个想法带去了新的方向,可以在以太坊主链上创建子链。这些子链可以发出他们的子链,并且这些子链还可以创建子链,如此往复。
最后的结果是,我们可以在子链层级上处理很多复杂的操作,可以让成千上万的用户运行整个应用,但是只和以太坊主链进行最少的交互。Plasma子链可以快速推进,并且需要更少的转账费用,因为上面的操作不需要通过整个以太坊区块链。
为了理解Plasma是怎么工作的,让我们举例说明。
假设你在以太坊上创建一个卡牌游戏。这些会是ERC721不可更改的代币(例如以太猫),但是会有某种特性和属性,会让用户能和对方一起玩。这类复杂的操作在链上进行会十分昂贵,所以你决定使用Plasma来运行你的应用。
首先,我们在以太坊主链上创造了一系列智能合约,可以作为Plasma子链的“根源”。Plasma根链包含最基础的子链“状态转换规则”(就类似“交易不可以发送已经消费的资产”),将子链状态的哈希值记录,并且作为某种“桥”,能够让用户将资产在以太坊主链和子链之间转移。
然后,我们创造了我们的子链。子链可以有自己的共识算法,例如,我们说它使用PoA算法,这是取决于可信区块生产者(也就是,验证节点)。区块生产者就类似在工作量证明中的矿工类似,他们就是从区块接受交易的节点,并且获得交易手续费。让我们简单举例,假设说你(创造这个游戏的公司)是创造区块唯一的主体,也就是说,你的公司在运行的几个节点是我们子链的区块生产者。
一旦子链被创建并且激活,区块生产者就会对根合约做出定期承诺。这意味着,他们会很有效地说“我承诺在子链中最近的区块是X”。这些承诺都会记录在Plasma根链上,作为子链发生过什么的证据。
现在子链已经完成,我们可以创建卡牌游戏的基本组成部分。卡牌本身是ERC721的,这是在以太坊主链上创建的,然后通过Plasma根链转移到子链上。这就带来了一个很重要的点:Plasma让我们可以和基于区块链的数字资产进行交互,但是这些资产需要首先在以太坊主链上创建。然后,我们可以将实际游戏应用部署在子链的智能合约上,这会包含整个游戏的逻辑和规则。
当用户想要玩我们的游戏,他们只需要和子链进行交互。他们可以持有资产(ERC721代币),购买和交易成以太坊,和其他用户进行对赛,而且不需要和主链直接交互。因为只有很少部分的节点(也就是,区块生产者)需要进行处理交易,手续费会很低,而且速度会快很多。
但是怎么保证安全呢?
通过将更多的操作转移下主链,然后转上子链,这样我们确实可以处理更多的交易。但是安全性如何呢?在子链上进行转账后,这就结束了吗?毕竟,我们刚刚描述了一个系统,其中只有单个主体来控制子链的区块生产。这样不就是中心化了吗?公司可以在任何时候盗取我们的资金,或者是在任何时候拿走你的卡片呢?
简单的回答是:甚至在一种情况下,单个主体控制了子链上100%的区块生产,Plasma也可以给予最基本的保障,你可以提取资金,并且放回主链。如果区块生产者想要进行欺诈,最坏地情况是他们强迫你离开子链。
Truebit
Truebit是能够帮助以太坊进行链下复杂计算的技术。它其实和状态通道和Plasma都不同,因为这对于提高以太坊区块链整体转账吞吐来说,更加有用。Truebit不会处理更多的交易,但是它会让基于以太坊的应用可以做更多复杂的事情,而且仍然可以在主链上进行验证。
这会让在链上进行计算成本过高的以太坊应用,变得更加有效。例如,进行和其他区块链的简单支付验证(SPV),这会让以太坊智能合约“检查”是否这笔交易在另外的链上(例如比特币或者狗狗币)发生。
2层解决方案给我们分享了一个观点:一旦我们有了公链提供的核心,我们可以把它作为数字经济系统的锚定,然后扩大区块链应用的使用性。
比特定的2层解决方案更重要地是,底层技术的发展以及数字经济的设计。
这些2层扩容解决方案,对于类似以太坊这种可编程区块链来说,是最有利的长期价值推动者。在2层解决方案底层的基础上打造经济机制,只有在区块链可以变成的前提下才行:你需要脚本语言来写代码,可以强制进行交互游戏。这在比特币上系统上会变得更加困难,(或者说,对于Plasma来说,这几乎不可能),这就提供了有限的脚本可能性。
以太坊可以让我们创建2层解决方案,以在速度,结果和手续费之间的矩阵平衡中获得新的优势。这可以让底层区块链可以为更多种类的应用所使用,因为不同种类的应用,会有不同的模型,对于权衡也有不同的需求。对于高价值资金交易,我们使用主链,来保证安全。对于数字资产交易时,速度更重要,我们使用Plasma。2层扩容技术,让我们不需要在像底层区块链进行这些权衡的情况下,保护了去中心化和最终结果。
而且,很难提前预测对于扩容解决方案来说,什么样的脚本能力是必须的。当以太坊设计的时候,Plasma和Truebit还没有发明。但是因为以太坊是完全可编程的,它能够实施我们创造的任何虚拟经济机制。
能够完全利用区块链技术价值的唯一方式,就是和一个类似以太坊的可编程的区块链一起使用,这里的区块链指的是由加密经济共识创建的核心。
原文:https://medium.com/l4-media/making-sense-of-ethereums-layer-2-scaling-solutions-state-channels-plasma-and-truebit-22cb40dcc2f4
作者:Josh Stark
编译:nuszjj
作者:Josh Stark
编译:nuszjj
热门