原文标题:《侧链、Plasma和Sharding三者之间有何区别?V神帮你解答!》作者:VitalikButerin编译:Jhonny原文链接:https://vitalik.ca/general/2019/06/12/plasma_vs_sharding.html
一个经常出现的问题是:Sharding与侧链(sidechain)或Plasma到底有什么不同?这三种体系结构似乎都涉及到一种中心辐射型体系结构(hub-and-spokearchitecture),即由一条处于中心的、支撑系统共识的「主链」和一组包含实际用户交易的「子链」组成的结构。
子链的哈希通常会定期地发布到主链中(理论上来说,不存在主链的分片链可能也是这样,但目前还没有实现;本文将不会专注于这方面,但其中的论据是差不多的)。基于这些基本的相似性,为何在这三种方案的采用方面会存在差异呢?
区分侧链(sidechain)和Plasma是相对简单的。Plasma链其实就是具有非托管特征的侧链:如果Plasma链中出现任何错误,那该错误可以被检测到,且用户可以安全地从Plasma链中退出,阻止攻击者造成任何持久的破坏。
Plasma用户需要付出的唯一代价就是他们必须等待一个挑战期(challengeperiod),并在(扩展性较差的)主链上支付更高的交易费。普通的侧链并没有这种安全特性,因此它们往往没有那么安全。但是在很多情况下,设计Plasma链要更加困难复杂,且有人可能会认为,对于许多低价值的应用程序来说,并不值得为这些程序的安全而增加这种复杂性。
那Plasma和Sharding之间进行对比呢?两者之间的关键技术差异与紧密耦合(tightcoupling)这一概念有关。紧密耦合是Sharding的一个特征,但并不是侧链或Plasma的特征,也就是说,在Sharding系统中,主链(在以太坊2.0中称为「beaconchain(信标链)」)与子链的有效性是分不开的。换句话说,如果子链上的某个区块附属于主链上的某个无效区块,那该子链区块也是无效区块;更重要的是,如果主链上的某个区块包含了一个无效的子链区块,那该主链区块也是无效区块。
在没有分片的区块链网络(比如当前的以太坊网络)中,规范链(也即网络中的所有人都认为包含了「真实」历史记录的那条链)被认为是完全可用且有效的;以比特币和以太坊为例,一个典型的说法就是,规范链(canonicalchain)就是那条「最长的有效链」(更学究式的说法是那条「最重的有效可用链」)。
而在有分片的区块链网络(比如未来实现的以太坊2.0网络)中,「规范链是那条最重的有效可用链」的观念依旧适用,有效性和可用性既是对主链的要求,也是对分片链的要求。
但是,分片系统所带来的全新限制挑战是,用户无法直接地充分验证某条特定链的有效性和可用性,因为数据实在太多了。设计分片链面临的挑战是需要通过给予用户最大程度上的无需信任和实际间接的方式来验证哪条链是完全可用和有效的链,以此来绕过这个限制,这样用户就仍能决定哪条链是规范链了。在实践中,这涉及到了诸如committees(委员会)、SNARKs/STARKs、fishermanschemes(渔夫方案)以及fraud&dataavailabilityproofs(欺诈和数据可用性证明)等技术。
如果某条链的结构并没有这种紧密耦合特征,那可以说该结构就不是一个Layer1分片方案,而只是一个位于无法扩展的Layer1主链之上的Layer2系统。Plasma并不是一个紧密耦合的系统:一个无效的Plasma区块完全可以将其区块头(header)提交至以太坊主链上,因为以太坊基础层无法知晓该区块头代表了一个无效的Plasma区块,甚至无法知晓该区块头是代表了一个Plasma区块;以太坊基础层所能看到的只是一笔包含一小段数据的交易而已。但是,单条Plasma链失效的影响只会局限在该条Plasma链之中。
但是,如果你在不下载和执行整个操作的情况下,去分析用户为了确定他们正在查看的链是否完全有效和可用的过程,那你可能会发现,Plasma的运作方式和Sharding存在更多的类似之处。
比如,在Sharding中,用于阻止可用性问题的一项常用技术就是渔夫(fishermen)方案:如果某个节点认为某个区块的其中一段数据不可用(unavailable),那该节点可以对此发布一个挑战,从而创造了一个时间段,在该时间段内,任何人都可以发布这段数据。如果某个区块在足够长的时间内没有被挑战,那么那些附属于该区块的其他区块就可能被回滚(revert)。这似乎与Plasma很类似,在Plasma中,如果某个区块不可用,用户可以向主链发布一条消息,从而当主链响应时进行状态退出。
这两种技术最终都可能以相同的方式在面临压力是做出让步:当分片系统中存在过多的错误挑战时,用户将无法追踪是否所有的可用性挑战都已经得到响应;如果在Plasma系统中有太多的可用性挑战,那主链可能会不堪重负,因为用户的退出(exits)将占满主链的区块大小限制。在这两种情况下,似乎可以存在一个通常具有O(C^2)扩展性的系统(其中C表示某个节点的计算能力),但当遭遇攻击时,扩展性将下降至O(C)。然而,Sharding对此具有更多的防御能力。
首先,当前的分片设计使用随机抽样的委员会(committees),如此一来,除非某人占有整条链的很大一部分(可能是超过1/3)的验证者节点,否则是无法轻易地控制任何一个委员会的。此外,有比渔夫方案更好的处理数据可用性的策略:数据可用性证明(dataavailabilityproofs)。在一个使用数据可用性证明的机制中,如果某个区块是不可用的(unavailable),那客户端的数据有效性检查将会失败,客户端将会把该区块视为不可用区块。如果该区块是无效的(invalid),那即便只有一个欺诈证明(fraudproofs),那也会使各个客户端相信该区块是无效的。因此,从理论上来说,分片系统要比Plasma链更不易于遭受拒绝服务攻击(DoSattacks)。
其次,在面临大量攻击者(数量超过了所有验证者的1/3甚至1/2)时,分片链能够提供更强大的安全保障。在Plasma系统中,如果对负责审查退出的主网发起51%攻击时,总是可以成功地对Plasma链进行攻击;而在分片链中就不会这样。这是因为数据可用性证明和欺诈证明是发生在客户端内部的,而不是在区块链内部,因此这些证明是不会被51%攻击审查。
第三,分片链提供的防御更易于普及;Plasma的退出模式要求将状态分割成独立的部分,每个部分都是为了任何单个参与者的利益而进行维护,而依靠数据可用性证明、欺诈证明、渔夫方案和随机抽样的分片链则在理论上更为通用。
因此Plasma和Sharding在Layer2上提供的有效性和可用性保障存在很大差异,由于这些保障要求对激励机制和哪方对哪些数据段存在利益关系等进行论证等,因此这些保障很有限,且更为复杂。
但Plasma链也有很大的优势。
首先,Plasma链可以被迭代,新的设计可以更快地被实现,因为每条Plasma链都可以在无需与该生态系统中的其他链进行协调的情况下单独地进行部署。
其次,sharding就其内在而言更为脆弱(fragile),因为它试图保证一定量数据的绝对和完全可用性和有效性,且这些数据量必须设置在协议之中:如果数据量太少,那系统的扩展性将比它本来可以实现的更差;而如果数据量太多,那这个系统就面临崩溃的风险。
扩展性的最大安全水平也依赖于系统中的用户数量,而用户数量是一个不可预测的变量。相比之下,Plasma链则允许不同的用户在这方面做出不同的权衡,且允许用户更加灵活地根据情况的变化进行相应调整。
由单个运营商运行的Plasma链还可以提供比分片系统更多的隐私保护;而在分片系统中,所有的数据都是公开的。即便是在不需要进行隐私保护的领域,Plasma链也可能更有效率,因为分片系统的总数据的可用性要求需要大量额外的冗余数据作为安全界限。另一方面,在Plasma系统中,每段数据的数据要求都可以最小化,从而使长期来看,每条单独的数据可能只需要复制几次,而不是像在分片系统中那样需要复制上千次。
因此,从长期来看,一个将Plasma和Sharding混合起来的系统(其中基础层进行分片,Plasma链则存在于基础层之上,以提供更进一步的扩展性)似乎要比只依赖于其中一种策略的系统更能够满足不同用户群体的需求。
但不幸的是,这两者之间在某些关键部分有着难以消解的差异(比如,分片系统中的客户端所进行的数据可用性检查无法转移到Plasma主链中,因为这些检查只有在主观地、基于私人数据的情况下才有效)。但这两种扩展性解决方案(以及状态通道方案)都有着明朗的发展前景。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。