以太坊的“扩容”不是单一的、具体的问题,它是一系列问题,如果以太坊想要为全球几十亿用户提供服务,就必须克服这些阻碍。最普遍的问题就是交易吞吐量。目前,以太坊每秒可以处理15笔交易,相较而言,Visa处理速度可以达到45000笔/秒。在过去一年里,因为类似Cryptokitties这样的应用程序太过流行,导致整个网络运行速度也开始放缓,交易价格增加。
类似以太坊这样的公链,要求网络中每一个节点参与处理每一笔交易,这也正是其主要局限所在。再以太坊上的每个操作——转账,Cryptokitty的诞生,ERC20合约的生成——都必须由网络中的每个节点一起执行。这是设计时决定的,也是公链权威的保证。节点不需要从外部得知区块链的状态,它们自己可以解决。
这意味着以太坊的交易吞吐量存在基本限制:不能高于从单个节点获得的数据的速度。
我们可以要求每个节点做更多的工作。如果我们将区块大小加倍(不考虑gas的限制),这将意味着每个节点所做的工作量大约是现在工作量的两倍。但这是以牺牲去中心化为代价的:需要每个节点完成更多的工作,那么功能较弱的计算机(如消费者的设备)就可能会退出网络,而挖矿的权利将集中到强大的运营商手上。
因此我们需要一种方案,既能不增加单个节点的负荷,又能处理更多交易。
从概念上讲,我们可以采取两种方法来解决这个问题:
1) 如果每个节点不必并行处理每个操作呢?
第一种方法,改变前提:我们是否可以构建一个区块链,链内节点都不必参与处理每笔交易呢?是否可以将网络分成两个部分,半独立地运作呢?
分开后,A部分可以处理一批交易,B部分也可以处理一部分,这样区块链交易吞吐量就提高一倍,因为我们现在设定每两个节点可以同时工作。如果我们把区块链分成许许多多不同区域,那吞吐量会提高许多倍。
这就是“分片(sharding)”背后的理念,是由以太坊V神和其他科研人员提出来的。将一个区块链分成许多不同的“片”,每个“片”都可以独立处理交易。分片一般是指layer1的扩容方案,因为它是在以太坊的基层协议上实现的。
2) 如果为以太坊建立协议层网络呢?
第二种选择和第一种恰恰相反:与其增加以太坊自身的处理能力,不如在现有的基础之上采取措施。在以太坊区块链基本层的吞吐量不变的基础上,尝试执行更多操作,比如交易、状态更新或简单的计算。
这就是“链下”技术背后的原理,具体的技术包括状态通道,Plasma,Truebit。虽然每一种技术旨在解决不同问题,但它们都需要在保证安全性的前提下,进行“链下”操作。
这也被称作layer2,因为它们是建立在以太坊主链之上的,不需要在基础层上进行改变,相反,只是作为与链下软件交互的智能合约存在的。