前言:区块链要想构建Dapp生态,要想走向主流人群,优先要解决扩展性问题。但区块链是去中心化的系统,任何节点都可以自由加入,要在多样化的节点快速达成共识,是非常困难的事情。那么,区块链的真的无法扩展了吗?本文作者Preethi Kasireddy认为,虽然现在不能,但未来有希望。
方案 #5:Plasma
Plasma是最近刚刚引入的,是解决区块链可扩展计算问题更具希望的方案之一。
Plasma本质上是运行在根链(即以太坊主链)上的一系列智能合约。根链通过一种被称为“欺诈证明”的机制来保障Plasma链状态的有效性。(注:欺诈证明是一种通过数学证明来确定区块有效性的机制)
来源:Plasma白皮书
区块链被组织成一种树状层级结构,每个分支都是一条子链,包含自己的区块链历史以及可以映射-归并(map-reducable)的计算信息。我们把这些子链称为“Plasma区块链”,它们都从属于某一条区块链。
来源:Plasma白皮书
Plasma区块链不会把链上的内容暴露给根链(如以太坊)。取而代之的是,只有区块头的哈希值会被提交到根链上,这对于验证区块有效性已经足够了。
如果有一个欺诈证明被提交到了根链上,区块会被回滚并且区块创建者会被惩罚。换句话说,我们只在拜占庭条件下提交数据到根链。
因此,根链只处理从子链过来的少量提交,从而减少了传输到根链的数据量,使得更大数量的计算成为可能。
来源:Plasma白皮书
另外,数据只会被传播给那些希望验证某个特殊状态的节点。这消除了每个节点都需要监视每条链的要求,使得合约的执行更加具有可扩展性。
它们只需要监视能影响它们经济利益的链,从而强化正确行为,惩罚欺诈。欺诈证明允许任何一方举报非法区块,确保所有状态转换都是被验证过的。
此外,如果某个特殊链上发生了攻击,参与者可以快速和低成本地退出这个不可靠的子链。
来源:Plasma白皮书
来源:Plasma白皮书
Plasma在处理链下交易上也许和状态通道的实现(例如闪电网络)有些类似。状态通道和Plasma的主要区别是,在Plasma中,不是所有参与者都必须在线更新状态。此外,参与者不需要把数据提交到根链执行和确认交易。
Plasma精巧的部分在于:像闪电网络这样的状态通道类型的方案可以成为快速支付的主要接口层,而Plasma通过最小根链状态的提交来维护状态的更新。
来源:Plasma白皮书
这个方案还有很多复杂的细节,我希望可以在后面的文章中继续挖掘。
方案 #6: 链下计算(如TrueBit)
Truebit该方案的一个示例,使用链下计算在以太坊智能合约中实现可扩展交易。本质上,就像状态通道,TrueBit使用区块链之外的一层来完成密集计算。
也就是说,在这个系统中,之前在链上执行的昂贵交易将以一种可验证的方式在链下执行。它的工作流程如下:
不同于每个节点都参与,网络中一种被称为“求解者”的特殊参与者执行智能合约的计算,提交问题的结果并支付一定的押金。
如果求解者是正确的,将会获得奖励并返还押金。否则,如果求解者欺诈,押金会被没收,任何质疑都会在区块链上通过一种“验证游戏”来解决。
验证游戏的玩法如下:网络中有一些被称为“验证者”的参与者会在链下检查求解者的工作。如果没有验证者发出错误通知,那么系统就会接受这个结果。
如果某个验证者质疑求解者结果的正确性,游戏会在区块链上运行很多轮来调停这个质疑,网络中拥有有限计算资源的“裁判”会裁定所有的质疑。系统架构保证裁判在链上完成的工作和链下实际执行的任务相比是微不足道的。
在游戏结束时,如果求解者确实在欺诈,将会被揭发和惩罚。如果没有欺诈,质疑者将会为误报所消耗的资源支付一定的费用。
TrueBit提出的链下计算框架的粗略框图
最后,为了使验证者确信错误的确存在,并且值得它们花费精力去找出这些错误,TrueBit做了一件很有意思的事情:它偶尔会强制求解者提交错误的结果,并且逆转了正常系统的激励方式:求解者如果提交错误结果将会获得奖励,而如果提交正确结果则会受到惩罚。这保证了系统中验证交易的验证者总是可以获得奖励。
总结一下,协议允许任何人提交一个计算任务,其他任何人在完成这个任务时都可以收到奖励,而系统的激励结构可以保证返回结果的正确性。通过把计算和验证过程从以太坊上转移到一个单独的协议中,可以扩展系统处理大量计算的能力且不受以太坊gas限制的约束。
其他的区块链扩展方案
还有一些其他的有意思的方案在加密货币社区中浮现。这些方案不是直接为了解决扩展性,但它们可以很容易地间接解决一些扩展性问题。
权益证明
和工作量证明类似,权益证明是一种通过阻止双花问题来支撑区块链安全的共识机制。
在传统的基于工作量证明的区块链中,矿工们通过竞争解决计算密集型问题来维护区块链数据的完整性,解决工作量证明数学难题可以获得奖励。
在这点上,它们使用CPU算力来验证交易,CPU算力越高你能够影响整个网络的能力占比就越大。在权益证明中,股权持有者使用它们的“美元”(在以太坊中就是以太)而非算力进行投票。
这到底是怎么工作的呢?
区块链会持续跟踪某些验证节点,被称为“验证者”,它们必须提供安全性抵押(被称为“作保”)以便能够参与区块验证。
如果一个验证者生产了任何被协议通过密码学方式证明是“非法”的东西,它们的抵押和参与共识过程的特权就被没收了。如果它们押对了共识结果,则可以赚回它们的抵押以及交易费。
事实上,验证者押对了最终的共识就可以赚钱,而押错了则会赔钱。可以和工作量证明作一个类比,每个矿工是在把它们的哈希算力押注到将要被接受的区块上。如果它们为了欺骗系统而选择押错,那么它们生产的任何区块都会变成孤块,导致它们赔钱。
有很多种不同类型的权益证明共识算法以及不同的给验证者分配奖励的机制,本文不再深入讨论。
权益证明是如何改善可扩展性的?
一个例子是和分片一起使用。分片和工作量证明一起使用很难保证安全性。回忆一下使用分片,我们把验证者的职责分散到了多个节点上,因此每个节点不需要处理所有工作。
然而,工作量证明被实现成了完全匿名,这会造成一个问题,即使单个分片只包含矿工的一小部分哈希算力因而是安全的,攻击者可以动用它们的所有算力来攻击这个分片并质疑整个网络。例如,我们有两个分片,A和B。
A拥有90%的哈希算力而B拥有10%。A只需要动用它5.1%的总哈希算力就可以对B发起攻击(凭借多数派51%攻击)。
以太坊目前的权益证明提案会使这一切发生改变,因为根据它的设计验证者们会拥有确定身份(即以太坊地址)。
知道它们的身份我们就可以解决这种类型的定向攻击,通过从整个验证者集合中随机选择一些节点来处理分片上任意给定的交易集合,从而使得攻击者不可能对任何特定分片发起定向攻击。
权益证明能够改善扩展性(尤其是以太坊)的另一个原因是,和工作量证明给验证区块的矿工发放新token不同,在权益证明中,验证者很可能只赚取交易费。因此,它们更有动力去增大区块的“gas限制”(因为往每个区块中打包更多交易可以赚取更多交易费),如果它们的验证服务器可以承受相应的负荷的话。
需要注意的是,验证者只能把gas限制增加到某个可以被其他验证者们承受的点上,否则它们回报会缩水因为导致了其他比较慢的验证者们放弃同步。
区块链租赁
另外一个以太坊特有的方案是“区块链租赁”。区块链租赁是一种通过减少存储在网络上的数据量来帮助加快交易次数的解决方案。在以太坊上,用户需要为计算步数、内存、交易日志和持久化存储付费。这些资源中的绝大部分都通过一种合理激励的方式进行付费,但存储不是这样。
在当前系统中,用户只为存储的字节数付费。然而,在现实中,我们可以论证存储和其他资源不同,因为它被永久持久化到了区块中。
作为替代,区块链租赁提议把存储消耗定义为“字节x 时间”。通过这种方式,协议中内建了一种保持网络轻量化和减小交易次数的激励。
去中心化存储
另一种保持网络轻量化的方案是使用诸如Swarm的去中心化存储服务。Swarm是以太坊上的一个点对点文件共享协议,你可以把应用程序代码和数据从主链上搬移到Swarm节点中,这些节点连接着以太坊主链,之后会和主链交换这些数据。
这里的基本前提是节点并非存储区块链上的所有东西,它们只存储那些经常被本地请求的数据,而把其他数据通过Swarm放到“云端”。
使用Swarm去中心化存储的粗略框图
还有跟多方案,但为了简洁起见(这篇文章已经很长了),这里就不讨论了。
结论
这个话题极其复杂,但我希望这篇文章能够给你一个全景的视角:为什么区块链可扩展性很重要,以及它可以如何被解决。
这无论如何都不是一个完整的列表,我将随着研究的深入继续跟进这个话题。我个人很怀疑可扩展性有没有一个完美的答案…但我相信某些方法的组合可以最终解决这个问题并允许区块链应用继续向前迈进。
一如既往,如果有什么错误请不吝指正,或者在留言中发起一个(理性的)讨论。
祝在区块链中玩得开心!
(本文来自于hackernoon.com,由蓝狐笔记社群“鑫鑫”翻译。)