在《以太坊的设计艺术(上)》中,以太坊创始人 Vitalik Buterin 主要对 ETH2 的 PoS 模型进行了详细的解析,接下来 Vitalik 继续对 ETH2 的扩容方案进行了详述。
(律动注:分片的概念源自于数据库的分区表理念,所谓分片其实就是要把数据放到不同的数据库和主机上,从而数据可以得到并行处理,提高处理效率。在区块链中,每个片处理各自分片内的交易,从而达到扩容的效果。)
早在 2014 年,Vitalik 以及以太坊社区就开始对分片进行探索研究。相关研究人员在最初就一致认为,链上的每笔转账都需要被每个节点验证是件十分愚蠢的事情,以太坊应该使用一种更高效的方式来保证链上安全。
过去几年对于计算机科学的学习研究给 Vitalik 带来了很大的启发。在学习过程中,Vitalik 深刻体会到,当你对一个高效的算法再稍加复杂化一点,就可以达到最佳效率。
一个很好的例子就是数列排序问题:如何将一个随机数列从小到大进行排列,普通人可能会选择依次从数列中选出最小的然后进行排列,这种算法通常在 runtime 中被称为 O(N^2),也就是说处理序列的步骤是序列长度的平方。
然而这种排序算法并不是最高效的,更聪明一些的算法可能是类似于归并排序、快速分类以及一些其他的归类算法,这些算法的所需步骤不再是 O(N^2),而是 O(LogN)。
比如说,你有 100 个数的数列,由于 100 是三位数,那么所需的处理步骤为 100*3,也就是 300 步。当你明白这些算法的运算逻辑时你会感觉这些算法从数学角度来看是十分简洁明了的,虽然这些算法比普通算法稍微复杂了一点,但效率却提高了很多。
最初的区块链就像是普通算法,每一个节点验证每一笔转账,虽然简单易懂但效率十分低下。现在区块链所需的是一种复杂度稍高,但更加高效的算法。分片或许就是这种算法,在分片的世界中,验证人不需要验证所有的事情,只需要验证一些,十分高效。
但在这种情况下如何抵御 1% 攻击(攻击者将算力集中攻击一条链的某一部分,并让被攻击部分无法正常运作)呢?经过研究探索后,现在研究人员已经得出了几种很巧妙的方式来抵御这种攻击。
现在仍然有许多人认为分片是不可行的,批评的点主要分为两个层面:
首先是单纯地不理解「间接验证」以及「概率性验证」等概念,他们认为验证这件事只能是非黑即白的,要不然你就是对转账进行了验证,要不然你就是没有验证,不存在中间性事件。
其次,是对分片中的各类假设深表质疑,他们认为这些假设在现实系统运行时可能会让系统变得更脆弱。
我们用「欺诈证明」举例,欺诈证明本质上就是一种大规模的「概率性验证」。有一小群人对计算结果进行验证并签署验证证明随后将一些 ETH 质押在证明上,任何人都可以对证明进行验证和挑战,当有人验证证明发现其有误时,可进行挑战,挑战成功后,可得到质押在证明上的 ETH 作为奖励。
那么「欺诈证明」的问题是什么?本质上他所存在的问题就是他的「同步假设(Synchrony Assumption)」。一般来说,在网络正常运行时,欺诈证明能够及时被验证真伪,并被及时同步到网络当中,但当网络出现问题、存在延时时,「同步假设」一旦被打破,「欺诈证明」也就不再有效。
如果算法或机制能够避免这些假设,系统在没有任何假设的条件下能够正常工作,这是最好的。对于分片来说,研究人员一直试图尽可能将假设数量减少。比如之前分片依赖于「多数诚实假设」,现在即使你控制了 2/3 的验证人你也无法将无效区块上链。对于「欺诈证明」来说,如果使用 zk Rollup,我们可以在不应用欺诈证明的情况下保证分片的安全。
Vitalik 今年 10 月份在论坛中发布了标题为《以 Rollup 为核心的以太坊路线图》的讨论帖,许多人认为是不是以太坊要放弃分片而转向 Rollup 方案进行扩容了。Vitalik 明确地否定了这个说法。并进一步详细地进行了解释。
(律动注:Rollup 是以太坊上的一种二层扩容方案。简单来说,为了减轻一层主链的运行负担,Rollup 将处理大量交易,处理完成后将最终将结果告知主链。)
关于分片和 Rollup 有何不同这个问题,Vitalik 表示现在有许多人对分片的理解存在误区,认为分片就是一群节点,但这并不是 Vitalik 所理解的分片。
Vitalik 认为分片中的每一片都是一条区块链中的一个逻辑子集,然后一群节点被派遣负责验证这个逻辑子集,每个节点都可以验证多分片。
Rollup 则具备一部分分片的特质,但不是所有。
其中一个相同点是对于链上计算的拆分,如果你有许多 Rollups,不同的 Rollup 会负责各自的计算,这也就是 Rollup 如何进行扩容的。
另一个相同点是跨片或跨 Rollup 是无法直接同步交互、执行(Synchronous interaction/execution)的,每一个分片或 Rollup 都是一个单独「域」(Domain),在域内的交互可以做到同步,但跨域间交互是无法同步的。虽然跨 Rollup 的同步交互是有可能实现的,但难度很高。
分片与 Rollup 的一个不同点是安全模型。一条链上的不同 Rollups 的安全会由同一数据层负责,例如以太坊上的 Rollup,他们的数据全都会被 ETH 的节点验证,而分片并不是这样的,所以某种程度来说 Rollup 避免了一些分片中会出现的安全缺陷。
虽然分片和 Rollup 存在很多共性和不同之处,但对于用户来说,用户体验不会有太大差异。另一个很有趣的事是当 ETH2 应用 Rollup 时,你会发现不同的 Rollup 会使用不同的分片,可能一个 Rollup 使用 5 个分片,也有可能 5 个 Rollup 共享一个分片。
Vitalik 首先再次分享了他对比特币和以太坊价值区别的看法。相比于比特币社区,以太坊社区是更加实用主义的。比如说,对于以太坊 Gas Limit 的问题,经过社区内各利益群体进行协调,最终会进行权衡得出最佳的区块大小,而不是固守统一标准,最终导致分叉。
现在以太坊面临两个很现实的问题,从 Gas 费用飙升就可以看出现在以太坊极度需求扩容,且希望扩容马上实现。过高的 Gas 费用已经让许多以太坊上的应用被迫出局,尤其是那些非金融类应用。
如果从现实的技术层面来看,Rollup 是现有且最好的技术选择。虽然现在状态通道也是可用的,但是状态通道只适用于各别应用,局限性过强。Plasma 也是一个选择,但 Plasma 只适用于支付领域,并不支持通用合约。所以目前即使以中期的眼光来看,Rollup 都会是最佳的扩容选择。
另一件很有趣的事是,如果将 Rollup 和 ETH2 的路线图放在一起看,我们可以看到,Phase0(第零阶段)的 PoS,Phase1 的数据的分片,Phase2 的执行的分片,只要在 Phase1 加上 Rollup,以太坊将能达到极高的吞吐量,所以只要人们愿意继续坚持 Rollup 技术,不光现在的以太坊可以实现扩容,在未来,ETH2 的 Phase1 吞吐量将远超人们的想象。
所以人们需要认清现实,且以太坊社区应该致力于发展 Rollup。Vitalik 给出了几个理由:
1.Rollup 很快就能实现,且有很强的扩容能力。
2. 若底层公链的功能够单一,那 ETH2 就可以抛弃一些像「欺诈证明」这类的安全假设,那么安全性将大大提升,这也会使 Rollup 能够更专注于其本职工作。
3. 正如「以太坊卫星生态」中所说,如果以太坊能够专注于 Rollup,ETH2 将能够与生态中其他以太坊帮手、赋能者,甚至竞争对手合作,以太坊将成为这些项目的平台,而这些项目就像是卫星围绕着以太坊,并通过桥接与以太坊交互,最终在执行层共创协同效应。
Vitalik 认为,在未来大多数用户将长期生存在二层网络中,可能几年都不会与一层网络进行一次交互。但也可能会有几种情况用户还是会与一层网络交互:
1.当用户能够通过高效的「大规模退出」机制,以极低的手续费穿梭于一层二层网络间;
2.如果二层网络崩溃了;
3.对于有些应用来说,应用的核心更适合被注册在一层主链上。例如说应用会在一层网络发币,然后将代币存入二层网络中,之后人们将会在二层网络中使用代币。
Vitalik 十分有信心,在未来随着时间的推移,用户将慢慢地从一层网络迁移至二层网络。
「以 Rollup 为核心的以太坊路线图」部分未完待续,在《以太坊的设计艺术(下)》中,Vitalik 将继续对 Rollup 扩容的细节进行讨论,并对 EIP-1559 及以太坊 2.0 的 Phase1.5 进行概述讲解。
声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。