区块天下 区块链新闻 以太坊2.0如何实现扩展性:harding 分片、Plasma 链与状态通道

以太坊2.0如何实现扩展性:harding 分片、Plasma 链与状态通道

随着以太坊网络的使用不断扩大,通过一个强大而有效的机制来实现以太坊网络的长期扩展和大规模采用变得越来越重要。

在上篇文章《Serenity 将带来什么?》中,我们讨论了以太坊网络目前面临的最大问题之一,即扩容性。以太坊网络支持数百个去中心化应用程序,每天处理数十万比交易。随着以太坊网络的使用不断增加,越来越多的数字应用被创建,越来越多的交易被执行,伴随而来的是交易的时间和成本的不断上升。这使得以太网络的速度变慢,使用起来也不那么方便了。

在最近的一次速度测试中,以太坊网络每秒仅能处理20笔交易 (各种来源的数据表明,在过去一年中,以太坊网络每秒处理约12-45笔交易)。相比之下,PayPal、Visa 等中心化网络每秒通常能完成193笔交易和1,667笔交易,Visa 的最大容量接近2.4万笔 [1]。

随着以太坊网络的使用不断扩大,通过一个强大而有效的机制来实现以太坊网络的长期扩展和大规模采用变得越来越重要。以太坊社区自2014年以来一直在研究如何扩展以太坊网络,且不管是以太坊还是其他区块网络,都研究了几种实现扩容的解决方案。当前,以太坊社区选择将 sharding (分片) 作为扩展该网络的最佳方式。

本文将首先探讨一些已经研究过的用于扩展以太坊和其他区块链的解决方案,其中有些方案可以与 sharding 相结合,之后我们将探讨有关 sharding 的细节及其发展路线图。

区块链的不可能三角

在探讨如何扩展以太坊之前,我们有必要了解一下”区块链的不可能三角。”这个首先由以太坊创始人 Vitalik Buterin 提出的三角悖论指出,区块链网络只能完全满足以下三个特性中的两个参数:去中心化性、安全性和扩容性。针对这种三难困境的一种理想解决方案就是在这三者之间做出妥协。目前,以太坊网络是去中心化且安全的,但缺乏可扩展性。扩展以太坊网络的尝试必须确保不会使得网络的去中心化和安全性受到损害,这样才能提供彻底、长期的解决办法。

不尽人意的扩展方案

扩展区块链的最早想法之一就是简单地增加每个区块的大小。以太坊区块链上一个区块的大小取决于该区块的Gas上限,当前每个以太坊区块的Gas上限是800万Gas。人们的想法是,由于每个区块的生成速度保持不变,因此提高Gas上限将会允许在同一时期执行更多的交易,从而提高网络的速度和吞吐量。

尽管这种想法在技术上是正确的,但是将区块大小增加到某个最优点之后,往往会产生比它所解决的问题更多的问题,并且由于这种方式所带来的负面影响,使得这种方式实际上并不会增加吞吐量。

首先,更大的区块意味着更难以被处理,并且往往会导致更高的延迟,这对以太坊网络是不利的。这意味着当区块大小增加到某个特定的程度之后,只有那些拥有先进和昂贵的硬件设备的人 (矿工) 才能成功地进行挖矿 [2]。

其次,更大的区块大小也意味着需要更多的存储空间,这就会增加每个网络节点所需的容量。当前以太坊区块链的大小约是227GB,因此将区块大小加倍将使这个数字加倍,且网络的交易速度和吞吐量并不会因此而带来显著的提升 [3]。这将再次有利于那些能够负担得起更好的硬件和更大存储空间的富人。

最后,更大的区块将使节点更难以与网络同步。这就又让那些拥有更多资源的人处于优势地位,并且使得网络在遭到重大攻击时更难以实现网络重组。

所有这些因素都意味着当区块大小增加至超过某个最优点之后,网络会存在更大的中心化风险,因为这种方式将会使得网络权利集中在那些最富有的参与者手中,阻止那些只拥有普通硬件设备的大多数用户运行节点或进行 ETH 挖矿 [4]。因此这种方式并不是一种长期可持续扩展以太坊网络的可行方案。

第二种方式是通过使用很多不同的山寨币网络来减轻主链的负载,从而试图增加网络的扩展性。也即将交易转移至那些更小的区块链网络中进行 (这些网络都有其自身的网络容量),而不是将所有交易都发送至单条主链之上。

这种方式有可能可以增加吞吐量,但代价是使网络的安全性受到损害。这是因为,具有较小市值和较低价值的山寨币 (altcoins) 更容易被攻击或控制。正如 Vitalik 所说的那样:”通过这种方式使得吞吐量增加了 N 倍,但同时也使安全性降低 N 倍。”因此,这种方式只有在 N 值很小的时候才安全,即这种方式无法显著地提高网络的扩展性并保证网络的安全性。[4]

第三种类似的方式称为”混合挖矿” (merge mining),这种方式被 Namecoin 等项目采用。与使用很多不同的山寨币的方式类似,混合挖矿就是试图通过将主链的负载转移至几条不同的侧链上,从而减轻主链的负载并增加吞吐量。

但是与山寨币的方式不同,所有采用混合挖矿的区块链网络都有着相同的矿工和挖矿协议,(或者在 PoS 系统中,有着相同的验证者)。这种方式增加了潜在攻击的成本,因此使得这种方式比使用很多山寨币的方式更加安全。但是网络吞吐量增加 N 倍,意味着网络中的挖矿能力也需要增加 N 倍,这就会导致同样的挖矿中心化风险,这点与增加区块大小的方式一样。

因此,上诉三种方式并不是解决区块链不可能三角的理想解决方案,因此并没有被以太坊2.0团队所接受。

有前景的扩展方案

最近,以太坊社区已经研究了几种更有前景的扩展方案,这些方案可以在不严重损害网络安全性或去中心化的情况下提高扩展性,目前正由一些项目进行实现。

其中一种方案涉及到使用诸如 ZK-SNARKs 或 Mimblewimble 等先进的密码学技术来加快节点的验证速度。这种系统在链上创建能够使各个节点更快更容易地对区块进行验证的区块密码学证明 (cryptographic proofs),这种方式使得节点只需验证区块的密码学证明,而无需从创始区块开始验证整条链。同时,ZK-rollups 和 ZK-ZK-rollups 也被认为有望将以太坊的吞吐量提升30倍。[8]

尽管如上这些方案可能带来交易速度的提升,但它们并不是完整的扩展方案,且 Vitalik 认为通过使用更简单的加密经济学就可以实现同样的效果,而无需使用这些纯粹的密码学技术。

01. Plasma 链

Plasma 链是另一种有前景的扩展方案,它通过实现在区块链之间 (比如以太坊主链和 Plasma 链之间) 进行资产的相互转移来增加带有智能合约功能的区块链的吞吐量。资产从区块链主链发送并存储在 Plasma 链上。存储在 Plasma 链上的资金可以通过一种称为退出 (exit) 的方式安全地撤回至主链上。只要主链的共识机制是安全的,就可以保证能够安全地撤回到主链上。

理解 Plasm 链的一个很好的例子就是,我们可以将 Plasma 链比作是在赌场购买筹码:顾客可以带着现金进入赌场,使用现金购买任意数量的筹码,然后按照自己的意愿使用这些筹码 (前提是遵循赌场的规章制度),等顾客想要离开赌场的时候就可以将手头上的筹码退换成货币。

这与以太坊区块链中的 Plasma 链的运行方式类似,只是这里的”货币”是以太币 (ETH),筹码是 Plasma 链中的某种原生山寨币 [5]。这样一来,交易就从以太坊主链上被委托到了 Plasma 链上,从而使主要节点可以以一种更具成本效益和更合理的方式来分配计算能力。

Plasma 链是相对安全的,因为 Plasma 链直接与以太坊主链相连接,且将以太坊作为真相来源。用户还可以依赖以太坊主网的安全性和规则来赎回他们的 ETH 或 Plasma 代币。同时,Plasma 链使用一种称为 MapReduce 的工具,配合一个默克尔 trie 结构来实现快速简单地欺诈验证,以此来抵御恶意者的欺诈行为。

以太坊开发者 Collin Cusce 解释道:”那些在 Plasma 链上进行了资金抵押的用户将会自我监控,且当他们能够证明存在不当行为时,会将争议以证明的形式提交给根链 (即以太坊主链)。”

Plasma 链甚至包含了”回滚”的功能,即如果 Plasma 链上的某个恶意者企图进行欺诈,其花费请求被证明无效之后,”回滚”功能将被激活。激活之后,所有涉及的资金将被返回至欺诈之前的状态。从计算角度来说,这种回滚的成本是很低的,只需要消耗以太坊主链的2位空间。[6]

通过这种方式,Plasma 链能够使以太坊主链得以扩展并更好地运行。同时,Plasma 链通过将主链及其相关的工具和协议作为唯一的真相来源,从而使 Plasma 链保持一定程度的安全。

与上文讨论的其他扩展想法相比,Plasma 链更具创新性和安全性,但与任何解决方案一样,Plasma 也并非没有问题和折衷之处。

首先,通过使用 Plasma 链只能有限地扩展以太坊网络,而无法以指数方式扩展。尽管 Plasma 链与以太坊主链相连接,并将以太坊主链作为唯一的真相来源,但 Plasma 链并不像以太坊主链本身那样那么安全,因为 Plasma 链容易受到”拒绝访问攻击 (denial of access attacks)”。其中的问题是,有着更少节点数和更少用户量的小型区块链 (如 Plasma 链),要比拥有更多节点数和更多用户量的以太坊主链更易受到攻击。

如果某条 Plasma 链受到大规模攻击,那该条 Plasma 链的所有用户将需要将自己储存在 Plasma 链上的资金撤回至以太坊主链上。但问题是,如果那些同时试图撤回至主链的 Plasma 链用户的数量超过了以太坊主链的短期计算资源承受的范围,那任何此时无法退出的用户都将遭遇拒绝访问,这是一个严重的安全问题。

以太坊 Sharding FAQ [4] 对此进行了解释:”…这种情况下,区块链中将没有足够的空间来及时处理所有的退出,因此这种系统将变得不安全。”

幸运的是,有一些方法可以缓解 Plasma 链的这种不安全性。比如,通过设置灵活的退出延迟 (withdrawal delay) 机制,当很多 Plasma 链用户同时提出退出请求时,将自动延长退出时间。这种方式能够保障用户资金的安全,但依旧可能使强大的攻击者锁定用户的资金很长一段时间。这种”长时间的拒绝服务”是一种安全故障,但这比”完全丧失访问权限”要温和得多。

且如果受到攻击的 Plasma 链是专门用于进行微额交易,而非进行高价值交易时,延长退出时间带来的影响也会更小 [4]。事实上,将 Plasma 链用于进行微额交易才使其最有意义,因为以太坊主链的高交易费和更长的交易时间并不利于进行微额交易。同样值得注意的是,Plasma 链的不安全性并不会影响以太坊主链的安全性。

虽然 Plasma 链仍然是一个相对较新的、未经测试的概念,但其潜在的优点似乎超过了其缺点。当”Cryptokitties (加密猫)” Dapp 在以太坊主网上线时,由此导致的交易量激增对网络的可用性产生了明显的负面影响,包括交易价格和等待时间的增加。如果这款 Dapp 是搭建在某条 Plasma 链上的话,那以太坊主链就可以自由地进行一些更重要的和更有价值的交易了,其可用性也就不会受到如此大的影响了。

Vitalik 也认为,Plasma 在不可能三角方面的折衷性与上文之前提及的其他方案不同,Plasma 链是一种”不同方向的折衷”,并”可以说是一种更为温和的折衷”,这使得 Plasma 链能够”对 (以太坊) 现在进行很大的改进。” [4]

也许对于 Plasma 链来说,这种方案的最大特点就是 Plasma 与 Sharding 并非相互排斥的。以太坊2.0将会实现这两种扩展方案,用户可以选择使用带有分片的主链,还是使用某条 Plasma 链,或者两者皆使用,这取决于用户自己的个人需求和偏好。

02. 状态通道

另一种以太坊链下扩展方案就是基于通道的策略来实现扩展,比如比特币的闪电网络或者以太坊的雷电网络。状态通道 (state channels) 具有许多与 Plasma 链相同的优点和权衡,但在技术层面上的操作却截然不同。

与 Plasma 链不同,雷电网络 (Raiden network) 并不是一条单独的、间歇性与以太坊主链相连接的区块链,而是一个通过使用以太坊智能合约与以太坊主链相连接,且拥有与主链不同的用户的网络。

所有想要进行交易的雷电网络用户都必须将一定数量的 ETH 存储在某个与主链相连接的智能合约中,该智能合约会在雷电网络中开启一个通道 (channel),该通道将直接与另一个用户相连接,这笔存储在该智能合约中的 ETH 存款将作为存款人进行交易的抵押品 (collateral)。

存储了一定量抵押品的用户可以在雷电网络中进行尽可能多的 ETH 交易,只要交易的 ETH 总额等于或少于该用户抵押在该智能合约中的 ETH 总额。[7]

除了开启该支付通道的交易双方之外,其他任何人都无法访问该智能合约,且抵押的 ETH 将确保交易的任何一方都不会存在双花问题,或者其他形式的欺诈。交易双方都需要提供一个与他们的 ETH 抵押相关联的数字签名,该数字签名使双方都负有责任,从而一旦交易被确认之后,交易双方就不能退出交易了。这确保了系统的公平性和一致性,以及安全性。[7]

如果某个用户A想要通过状态通道与另一个用户B进行交易,那用户A不一定需要与用户B开启一个通道,而是可以使用双方之间已经存在的中介通道,只要双方之间存在”至少一条可用的路径,该路径通过一个通道网络来将双方连接起来” [7]。

作者 | Colin Schwarz

编译 | Jhonny

前言

随着以太坊网络的使用不断扩大,通过一个强大而有效的机制来实现以太坊网络的长期扩展和大规模采用变得越来越重要。

在上篇文章《Serenity 将带来什么?》中,我们讨论了以太坊网络目前面临的最大问题之一,即扩容性。以太坊网络支持数百个去中心化应用程序,每天处理数十万比交易。随着以太坊网络的使用不断增加,越来越多的数字应用被创建,越来越多的交易被执行,伴随而来的是交易的时间和成本的不断上升。这使得以太网络的速度变慢,使用起来也不那么方便了。

在最近的一次速度测试中,以太坊网络每秒仅能处理20笔交易 (各种来源的数据表明,在过去一年中,以太坊网络每秒处理约12-45笔交易)。相比之下,PayPal、Visa 等中心化网络每秒通常能完成193笔交易和1,667笔交易,Visa 的最大容量接近2.4万笔 [1]。

随着以太坊网络的使用不断扩大,通过一个强大而有效的机制来实现以太坊网络的长期扩展和大规模采用变得越来越重要。以太坊社区自2014年以来一直在研究如何扩展以太坊网络,且不管是以太坊还是其他区块网络,都研究了几种实现扩容的解决方案。当前,以太坊社区选择将 sharding (分片) 作为扩展该网络的最佳方式。

本文将首先探讨一些已经研究过的用于扩展以太坊和其他区块链的解决方案,其中有些方案可以与 sharding 相结合,之后我们将探讨有关 sharding 的细节及其发展路线图。

区块链的不可能三角

在探讨如何扩展以太坊之前,我们有必要了解一下”区块链的不可能三角。”这个首先由以太坊创始人 Vitalik Buterin 提出的三角悖论指出,区块链网络只能完全满足以下三个特性中的两个参数:去中心化性、安全性和扩容性。针对这种三难困境的一种理想解决方案就是在这三者之间做出妥协。目前,以太坊网络是去中心化且安全的,但缺乏可扩展性。扩展以太坊网络的尝试必须确保不会使得网络的去中心化和安全性受到损害,这样才能提供彻底、长期的解决办法。

不尽人意的扩展方案

扩展区块链的最早想法之一就是简单地增加每个区块的大小。以太坊区块链上一个区块的大小取决于该区块的Gas上限,当前每个以太坊区块的Gas上限是800万Gas。人们的想法是,由于每个区块的生成速度保持不变,因此提高Gas上限将会允许在同一时期执行更多的交易,从而提高网络的速度和吞吐量。

尽管这种想法在技术上是正确的,但是将区块大小增加到某个最优点之后,往往会产生比它所解决的问题更多的问题,并且由于这种方式所带来的负面影响,使得这种方式实际上并不会增加吞吐量。

首先,更大的区块意味着更难以被处理,并且往往会导致更高的延迟,这对以太坊网络是不利的。这意味着当区块大小增加到某个特定的程度之后,只有那些拥有先进和昂贵的硬件设备的人 (矿工) 才能成功地进行挖矿 [2]。

其次,更大的区块大小也意味着需要更多的存储空间,这就会增加每个网络节点所需的容量。当前以太坊区块链的大小约是227GB,因此将区块大小加倍将使这个数字加倍,且网络的交易速度和吞吐量并不会因此而带来显著的提升 [3]。这将再次有利于那些能够负担得起更好的硬件和更大存储空间的富人。

最后,更大的区块将使节点更难以与网络同步。这就又让那些拥有更多资源的人处于优势地位,并且使得网络在遭到重大攻击时更难以实现网络重组。

所有这些因素都意味着当区块大小增加至超过某个最优点之后,网络会存在更大的中心化风险,因为这种方式将会使得网络权利集中在那些最富有的参与者手中,阻止那些只拥有普通硬件设备的大多数用户运行节点或进行 ETH 挖矿 [4]。因此这种方式并不是一种长期可持续扩展以太坊网络的可行方案。

第二种方式是通过使用很多不同的山寨币网络来减轻主链的负载,从而试图增加网络的扩展性。也即将交易转移至那些更小的区块链网络中进行 (这些网络都有其自身的网络容量),而不是将所有交易都发送至单条主链之上。

这种方式有可能可以增加吞吐量,但代价是使网络的安全性受到损害。这是因为,具有较小市值和较低价值的山寨币 (altcoins) 更容易被攻击或控制。正如 Vitalik 所说的那样:”通过这种方式使得吞吐量增加了 N 倍,但同时也使安全性降低 N 倍。”因此,这种方式只有在 N 值很小的时候才安全,即这种方式无法显著地提高网络的扩展性并保证网络的安全性。[4]

第三种类似的方式称为”混合挖矿” (merge mining),这种方式被 Namecoin 等项目采用。与使用很多不同的山寨币的方式类似,混合挖矿就是试图通过将主链的负载转移至几条不同的侧链上,从而减轻主链的负载并增加吞吐量。

但是与山寨币的方式不同,所有采用混合挖矿的区块链网络都有着相同的矿工和挖矿协议,(或者在 PoS 系统中,有着相同的验证者)。这种方式增加了潜在攻击的成本,因此使得这种方式比使用很多山寨币的方式更加安全。但是网络吞吐量增加 N 倍,意味着网络中的挖矿能力也需要增加 N 倍,这就会导致同样的挖矿中心化风险,这点与增加区块大小的方式一样。

因此,上诉三种方式并不是解决区块链不可能三角的理想解决方案,因此并没有被以太坊2.0团队所接受。

有前景的扩展方案

最近,以太坊社区已经研究了几种更有前景的扩展方案,这些方案可以在不严重损害网络安全性或去中心化的情况下提高扩展性,目前正由一些项目进行实现。

其中一种方案涉及到使用诸如 ZK-SNARKs 或 Mimblewimble 等先进的密码学技术来加快节点的验证速度。这种系统在链上创建能够使各个节点更快更容易地对区块进行验证的区块密码学证明 (cryptographic proofs),这种方式使得节点只需验证区块的密码学证明,而无需从创始区块开始验证整条链。同时,ZK-rollups 和 ZK-ZK-rollups 也被认为有望将以太坊的吞吐量提升30倍。[8]

尽管如上这些方案可能带来交易速度的提升,但它们并不是完整的扩展方案,且 Vitalik 认为通过使用更简单的加密经济学就可以实现同样的效果,而无需使用这些纯粹的密码学技术。

01. Plasma 链

Plasma 链是另一种有前景的扩展方案,它通过实现在区块链之间 (比如以太坊主链和 Plasma 链之间) 进行资产的相互转移来增加带有智能合约功能的区块链的吞吐量。资产从区块链主链发送并存储在 Plasma 链上。存储在 Plasma 链上的资金可以通过一种称为退出 (exit) 的方式安全地撤回至主链上。只要主链的共识机制是安全的,就可以保证能够安全地撤回到主链上。

理解 Plasm 链的一个很好的例子就是,我们可以将 Plasma 链比作是在赌场购买筹码:顾客可以带着现金进入赌场,使用现金购买任意数量的筹码,然后按照自己的意愿使用这些筹码 (前提是遵循赌场的规章制度),等顾客想要离开赌场的时候就可以将手头上的筹码退换成货币。

这与以太坊区块链中的 Plasma 链的运行方式类似,只是这里的”货币”是以太币 (ETH),筹码是 Plasma 链中的某种原生山寨币 [5]。这样一来,交易就从以太坊主链上被委托到了 Plasma 链上,从而使主要节点可以以一种更具成本效益和更合理的方式来分配计算能力。

Plasma 链是相对安全的,因为 Plasma 链直接与以太坊主链相连接,且将以太坊作为真相来源。用户还可以依赖以太坊主网的安全性和规则来赎回他们的 ETH 或 Plasma 代币。同时,Plasma 链使用一种称为 MapReduce 的工具,配合一个默克尔 trie 结构来实现快速简单地欺诈验证,以此来抵御恶意者的欺诈行为。

以太坊开发者 Collin Cusce 解释道:”那些在 Plasma 链上进行了资金抵押的用户将会自我监控,且当他们能够证明存在不当行为时,会将争议以证明的形式提交给根链 (即以太坊主链)。”

Plasma 链甚至包含了”回滚”的功能,即如果 Plasma 链上的某个恶意者企图进行欺诈,其花费请求被证明无效之后,”回滚”功能将被激活。激活之后,所有涉及的资金将被返回至欺诈之前的状态。从计算角度来说,这种回滚的成本是很低的,只需要消耗以太坊主链的2位空间。[6]

通过这种方式,Plasma 链能够使以太坊主链得以扩展并更好地运行。同时,Plasma 链通过将主链及其相关的工具和协议作为唯一的真相来源,从而使 Plasma 链保持一定程度的安全。

与上文讨论的其他扩展想法相比,Plasma 链更具创新性和安全性,但与任何解决方案一样,Plasma 也并非没有问题和折衷之处。

首先,通过使用 Plasma 链只能有限地扩展以太坊网络,而无法以指数方式扩展。尽管 Plasma 链与以太坊主链相连接,并将以太坊主链作为唯一的真相来源,但 Plasma 链并不像以太坊主链本身那样那么安全,因为 Plasma 链容易受到”拒绝访问攻击 (denial of access attacks)”。其中的问题是,有着更少节点数和更少用户量的小型区块链 (如 Plasma 链),要比拥有更多节点数和更多用户量的以太坊主链更易受到攻击。

如果某条 Plasma 链受到大规模攻击,那该条 Plasma 链的所有用户将需要将自己储存在 Plasma 链上的资金撤回至以太坊主链上。但问题是,如果那些同时试图撤回至主链的 Plasma 链用户的数量超过了以太坊主链的短期计算资源承受的范围,那任何此时无法退出的用户都将遭遇拒绝访问,这是一个严重的安全问题。

以太坊 Sharding FAQ [4] 对此进行了解释:”…这种情况下,区块链中将没有足够的空间来及时处理所有的退出,因此这种系统将变得不安全。”

幸运的是,有一些方法可以缓解 Plasma 链的这种不安全性。比如,通过设置灵活的退出延迟 (withdrawal delay) 机制,当很多 Plasma 链用户同时提出退出请求时,将自动延长退出时间。这种方式能够保障用户资金的安全,但依旧可能使强大的攻击者锁定用户的资金很长一段时间。这种”长时间的拒绝服务”是一种安全故障,但这比”完全丧失访问权限”要温和得多。

且如果受到攻击的 Plasma 链是专门用于进行微额交易,而非进行高价值交易时,延长退出时间带来的影响也会更小 [4]。事实上,将 Plasma 链用于进行微额交易才使其最有意义,因为以太坊主链的高交易费和更长的交易时间并不利于进行微额交易。同样值得注意的是,Plasma 链的不安全性并不会影响以太坊主链的安全性。

虽然 Plasma 链仍然是一个相对较新的、未经测试的概念,但其潜在的优点似乎超过了其缺点。当”Cryptokitties (加密猫)” Dapp 在以太坊主网上线时,由此导致的交易量激增对网络的可用性产生了明显的负面影响,包括交易价格和等待时间的增加。如果这款 Dapp 是搭建在某条 Plasma 链上的话,那以太坊主链就可以自由地进行一些更重要的和更有价值的交易了,其可用性也就不会受到如此大的影响了。

Vitalik 也认为,Plasma 在不可能三角方面的折衷性与上文之前提及的其他方案不同,Plasma 链是一种”不同方向的折衷”,并”可以说是一种更为温和的折衷”,这使得 Plasma 链能够”对 (以太坊) 现在进行很大的改进。” [4]

也许对于 Plasma 链来说,这种方案的最大特点就是 Plasma 与 Sharding 并非相互排斥的。以太坊2.0将会实现这两种扩展方案,用户可以选择使用带有分片的主链,还是使用某条 Plasma 链,或者两者皆使用,这取决于用户自己的个人需求和偏好。

02. 状态通道

另一种以太坊链下扩展方案就是基于通道的策略来实现扩展,比如比特币的闪电网络或者以太坊的雷电网络。状态通道 (state channels) 具有许多与 Plasma 链相同的优点和权衡,但在技术层面上的操作却截然不同。

与 Plasma 链不同,雷电网络 (Raiden network) 并不是一条单独的、间歇性与以太坊主链相连接的区块链,而是一个通过使用以太坊智能合约与以太坊主链相连接,且拥有与主链不同的用户的网络。

所有想要进行交易的雷电网络用户都必须将一定数量的 ETH 存储在某个与主链相连接的智能合约中,该智能合约会在雷电网络中开启一个通道 (channel),该通道将直接与另一个用户相连接,这笔存储在该智能合约中的 ETH 存款将作为存款人进行交易的抵押品 (collateral)。

存储了一定量抵押品的用户可以在雷电网络中进行尽可能多的 ETH 交易,只要交易的 ETH 总额等于或少于该用户抵押在该智能合约中的 ETH 总额。[7]

除了开启该支付通道的交易双方之外,其他任何人都无法访问该智能合约,且抵押的 ETH 将确保交易的任何一方都不会存在双花问题,或者其他形式的欺诈。交易双方都需要提供一个与他们的 ETH 抵押相关联的数字签名,该数字签名使双方都负有责任,从而一旦交易被确认之后,交易双方就不能退出交易了。这确保了系统的公平性和一致性,以及安全性。[7]

如果某个用户A想要通过状态通道与另一个用户B进行交易,那用户A不一定需要与用户B开启一个通道,而是可以使用双方之间已经存在的中介通道,只要双方之间存在”至少一条可用的路径,该路径通过一个通道网络来将双方连接起来” [7]。通过这种方式,即便某个用户在状态通道网络中只开启了一个或者两个通道,那该用户也可能可以与大量用户进行交易。

当然,通过直接的通道进行交易是无需手续费的,只需要抵押一定的 ETH 存款;但如果交易需要通过多个支付通道才能完成,那交易者可能需要为使用这些中介通道而支付一小笔手续费。这笔手续费会受到竞争性费用市场的影响,费用市场旨在将手续费维持在较低的水平,并与被发送的价值成正比 (即发送的价值越高,可能支付的手续费就相对更高)。

状态通道解决方案的一个最强大的特性是,由于状态通道中的交易不像在主链上那样需要整个网络达成共识,因此交易几乎可以在瞬间完成。此外,状态通道交易不会以任何方式阻塞主链,除非一次性创建并最终关闭所有的通道。[7]

与 Plasma 链一样,状态通道也是与 sharding 具有互补性的,且这两种以太坊扩展方案都正在被开发中。但不幸的是,与 Plasma 链一样,基于通道的解决方案也易于受到拒绝服务攻击。然而,正如之前已经指出的那样,这些攻击是可以被减轻的。简言之,雷电网络是一种将实现重大扩展性的通道解决方案,且在安全性或去中心化方面不会折衷到不可接受的程度。Sharding FAQ 解释道:”可以说,通过 sharding (以及其他技术) 实现的链上扩展和通过状态通道实现的链下扩展都是必要且互补的。” [4]

综上所述,人们已经探索了很多 Layer 1 方案用于扩展以太坊和其他区块链网络,同时不对网络的安全性和去中心化造成影响。一些方案已经失败了,其他一些方案也取得了有限的成果。

在经过大量研究之后,以太坊社区已经选择将 sharding 作为实现网络的大规模扩展并解决区块链的不可能三角悖论的最有前景的方案。Plasma 和状态通道等 Layer 2 解决方案将能够有与 sharding 一起使用,进一步扩展以太坊2.0网络。

Sharding

上文中我们探讨了一些旨在扩展以太坊和其他区块链网络的 Layer 2 扩展方案,下文中我们将讨论 sharding 这种被以太坊社区选择作为扩展以太坊网络的 Layer 1 解决方案。Sharding (分片) 被认为是实现以太坊网络大规模长期扩展的最佳方式。

Sharding 一词来自数据库术语,涉及到将一个大型的数据库分割成很多更小的、更易于管理的部分,以便能够更快、更有效地访问和处理数据。

对数据库进行分片将允许总数据量超过任何单个分片的容量。将区块链网络分割成很多分片以增加网络的扩展性,这与前者遵循相同的原则和目标,但实现起来会更加复杂。与 Casper 和 eWASM 一样,sharding 也是备受期待的以太坊2.0的主要特性之一。

比特币和其他区块链网络也已经考虑并试验了分片技术,以对交易处理或区块链状态进行分片,尽管其中大多数分片计划从未执行过。以太坊2.0的分片设想也将解决这两个主要瓶颈:对交易处理和区块链状态进行分片 [4]。根据 GitHub 上的官方 sharding FAQ:”我们希望能够每秒处理10,000多笔交易,而不需要强制每个节点都成为超级计算机或存储 TB 级大小的状态数据。这需要一个全面的解决方案,其中状态存储、交易处理、甚至交易下载和重新广播的工作负载都分摊在各个节点上。”[4]

这听起来很棒,但 sharding 实际上是如何工作的呢?

分而治之

在当前的以太坊网络上,每个节点必须验证每笔交易。这是确保网络活性的一个重要特性。即使80%的以太坊节点同时出故障,网络仍能正常运行。虽然让许多节点执行相同的操作实际上并不会使以太坊网络变慢,但这种方式并不一定能够使网络资源得到优化利用。

我们通过一个简单例子来展示如何更有效地使用以太坊的大量节点:假设以太坊网络上有三个节点,节点A、节点B和节点C。当前,为了验证某笔交易 (假设是数据T),每个节点必须分别验证T的整个数据集,以便对其进行确认。验证过程确保了网络的安全,但这会产生一个所有交易都必须经历的瓶颈:网络必须等到每个节点验证每笔交易,这样每秒处理的交易总数只能与每个节点的总交易容量一样。

但根据提议的 sharding (分片) 协议,T将被分解为T1、T2 和 T3。节点A、B 和 C 只需要处理这些较小的数据分片中的一个,就可以使整个数据集得以验证。

即便是在这个简单的示例中,通过将数据分解为三个集合也可以极大地提高吞吐量并减少交易时间。当以最佳的方式将 sharding 应用于以太坊网络中时,改进将是巨大的。在撰写本文时,以太坊网络上有超过8200个节点。[10]

根据最新的以太坊2.0规范,以太坊2.0区块链将被分成1024条分片链 [11]。由于每条分片链都将能够处理与当前以太坊网络一样多的交易量 (在实现 eWASM 之后会更多),sharding 将会使以太坊的吞吐量和网络速度提高 1,000 倍以上 [12]。此外,在增加了诸如 zk-rollups 和 Plasma 等 Layer 2 解决方案之后,还将进一步提高网络的吞吐量和交易速度。

Sharding, Casper & 信标链

在我们讲解 sharding 如何运作的细节之前,有必要了解一下 Casper:这是以太坊2.0将使用的一种 PoS (权益证明) 机制,旨在代替当前以太坊网络使用的 PoW (工作量证明) 机制。

Casper 将通过信标链得以实现,信标链将是以太坊2.0网络的系统链,确保整个网络的共识和状态的最终性 (finality),并将促进分片链之间的通信 (即跨分片通信)。

Casper 机制不会依赖于硬件挖矿来消耗能源和计算从而达成共识,而是将依赖于验证者来达成共识,验证者将需要质押 32 ETH 来成为以太坊2.0网络的验证者。

起初,sharding 和 Casper 是由不同的团队遵循不同的开发路线进行构建的,但从2018年春季开始,sharding 和 Casper 团队已经开始紧密协作,从而使这两个体制可以同时开发,并从彼此的进展中获益。验证者将通过 Casper 协议来对分片和信标链进行验证并达成共识。

由于以太坊的规模以及区块链技术的内在复杂性,对以太坊进行分片并非易事。区块链作家 Brian Curran 对其中的复杂性进行了解释:”…通过将节点分割成更小的子集,这些子集需要能够处理特定的交易集,同时更新网络状态,同时确保状态的有效性。”

这意味着进行了分片的以太坊网络如果想要与当前的网络一样正常运行,则必须开发一个复杂的系统来确定信标链和分片之间的职责分配,并建立分片之间以及分片与信标链之间的通信方式。该系统还必须包含一种机制,该机制将确保所有的网络数据和交易保持有效和可用,从而实现最终性 (finality)。

以太坊研究者和开发者一直在苦苦思索,什么样的系统才能最好地实现所有这些功能。

在进一步讨论之前,有必要指出,以太坊2.0提议的分片系统实际上还没有进入实际使用阶段。开发以太坊2.0客户端的团队仍在进行阶段0的工作,阶段0主要专注于信标链的实现。

Sharding 的许多细节仍在研究和开发中,但通过最新的以太坊2.0规范以及以太坊研究相关的文章,我们可以尝试设想提议的 sharding 模型。

共识 & 最终性

分片技术的引入以及从 PoW 到 PoS 系统的过渡,意味着在以太坊2.0网络中达成共识和最终性的方式将与当前的以太坊网络中有很大的不同。我们将从基本方面开始,然后详细介绍系统需要实现的一些更复杂的功能。

在以太坊2.0系统中,用户的账户都将特定于某个分片。与当前以太坊1.0链中的交易类似,每个分片中的交易将会相对简单,但分片之间的交易 (即跨分片交易) 将会使给系统增加一层复杂性。对此我们将在后文中加以论述。

在以太坊2.0中,交易将会按照当前正在开发的一个优化过程被分组到各个”交易包 (transaction packages)”中。这些交易包必须通过一个双重验证过程,以便添加到信标链主链上:

首先,验证者会被定期和随机地分配到各个分片链中。一旦被分配到某个分片链中,验证者就会对各个交易包的有效性进行投票。

如果验证者头赞成票,则信标链上的一个独立委员会必须通过一个分片管理者合约 (sharding manager contract) 来对该投票进行验证 [备注:信标链主链上将存在一个称为 sharding manager contract (分片管理者合约) 的智能合约,这个智能合约将负责管理主链如何接受所有分片中的数据和交易是否有效]。如果信标链委员会也投了赞成票,那该交易包就会被添加至主链中,成为公共账本的一部分,与该分片中的交易包建立一个不可篡改的交联 (crosslink)。[4]

在 sharding 的之后阶段,分片和主链之间的这种连接将是这样的:如果主链或其任何一条分片无效,则整个网络将被视为无效。就像在未实现 sharding 的区块链中一样,交易包的验证将带来网络状态的改变,这种改变将反映在诸如存储和账户余额等方面。[12]

经过一段时间 (根据当前的规范,也即每生成64个区块,约6.4分钟) 之后,每个分片中的验证者将被解除其职责,并重新返回到更大的验证者池之中,且信标链将会对每个分片重新随机分配验证者。[4]

信标链管理者所有验证者的登记表,通过 RANDAO 和 VDF 提供随机性,通过 Casper FFG 提供最终性,并记录跟踪信标链与分片之间的交联 (crosslinks)。在以太坊2.0的阶段2期间,信标链也将存储状态执行合约 [14]。

信标链通过采用 RANDAO 和 VDF (可验证延迟函数) 来提供随机性和不可预测性,防止潜在的攻击者试图预测他们的节点将被分配到哪个分片之中。其逻辑是,如果攻击者在分配之前不知道将被分配给哪个分片中,那么他们将无法提前配合发动攻击。

以太坊2.0系统通过对验证者进行随机选择和分配,并对交易包进行双重验证,以此来达成共识,保障网络安全不受攻击,并确保网络的最终性 (finality)。

跨分片通信

现在,我们对交易、分片和信标链之间的关系以及它们如何协同工作以便达成共识和最终性有了一定的理解。然而,为了使以太坊网络达到最大的效率,分片必须能够在彼此之间进行交易,并相互引用数据。这将需要网络上的各个分片之间进行通信。在去年布拉格举行的 Devcon 2018 大会上,以太坊创始人 Vitalik Buterin 对此进行了解释:

“想象一下, 以太坊被分割成数千个岛屿。每个岛屿都可以做自己的事情。每个岛屿都有自己的功能, 属于该岛的每个人 (即账户) 都可以交互, 他们可以自由地沉溺于其所有的功能中。如果他们想与其他岛屿接触, 就必须使用某种协议。”

这是一个很好的比喻,它提出了以太坊开发人员必须解决的最重要的问题之一:在实现分片所带来的巨大扩展性潜力的同时,如何实现多个不同的分片之间彼此通信,从而交付一个与当前以太坊网络一样的无缝集成系统?

正如 Vitalik 的岛屿类比所述,为了确保效率和安全性,各个分片之间的交互需要遵循一个特殊的协议。分片还需要知道何时适合进行彼此通信,并且只在需要时才进行通信 [12]。以太坊社区选择的通信协议称为”收据范式 (receipt paradigm)” [4],这些收据 (receipts) 将通过”分布式共享内存 (distributed shared memory)” 存储在信标链中,这意味着这些收据将只能被其他分片查看,而不能被分片修改。这个特性很重要,这允许各分片验证彼此的活动并从中获益,同时仍然维持每个分片的最终性。

早期的分片想法侧重于如何在分片之间最好地分配数据和职责。不过,Vitalik 最近公布了两项关于阶段2的新提议:Proposal 1 [17] 和 Proposal 2 [18]。

这两项提议的精神是”……有一个相对最小的共识层框架,该框架仍然提供足够的功能来开发复杂的框架,为我们提供作为第二层所需的所有智能合约功能。”[14] 为此,Vitalik 建议将单条分片的一些任务和责任委托给信标链。

之前的设计想法是,分片的功能类似于自治的以太坊区块链,具有自己的交易、ETH 和智能合约。通过该新提议,智能合约和 ETH 的基本级别的概念将只存在于信标链上,分片将继续拥有自己的状态和执行。这应该有助于降低每个分片的复杂性,同时维护网络的各种机能。

Vitalik 相信,新的以太坊系统将提供足够的功能来实现一个”支持分片中的智能合约、跨分片通信和所有其他功能的执行环境,我们希望使用信标链合约来构建这些功能。”

这个新系统将通过向信标状态添加三种新的交易类型和两种新的数据结构来完成。交易类型包括 NewExecutionScript、NewValidator 和 Withdrawal,这些交易分别代表着一个可以存储 ETH 的执行脚本,一个添加新的验证者的函数,以及一个从信标链中撤出验证者的函数。

这些新组件将用于促进跨分片通信,并交付这样一个系统,在这个系统中,所有 ETH 的交易和所有智能合约的执行都可以通过 Layer 2 abstraction 实现,而不需要将它们包含在分片中。通过使用信标链合约来引入这个抽象层将有助于将每个分片的复杂性降到最低,这将简化和改进分片之间的通信。

除了其固有的复杂性之外,跨分片通信的另一个问题是延迟性。如果我们想将一个代币从 shard A 发送到 shard B 中,shard A上将”销毁”那枚代币,并记录发送的地址和金额,以及目标分片。过一段时间后,每个分片将知道其他分片的状态根,这允许分片验证收据并确认该代币已经被转移了。此时,来自 shard A 的收据将由 shard B 回收,shard B 将验证该收据的有效性,以便该枚代币可以在 shard A 中进行销毁,并在 shard B 中找回。

这个过程会导致交易在被发送和实际被确认时间产生延迟,这会降低用户体验,并影响以太坊2.0应该提供的速度和扩展性 [15]。对此问题提出的解决方案称为 Fast Cross-Shard Transfers Via Optimistic Receipt Roots,其中的离你那很简单,即存储有条件的状态,并对提交的交易的有效性”保持乐观”。

一旦交易被验证,如果交易确实有效,则交易将被永久记录,反之则将被逆转。分片之间的通信是以太坊2.0开发人员仍在研究的最复杂的问题之一。以太坊2.0想要保留当前1.0链的优点,同时大大提高其扩展性,就必须要成功地实现跨分片通信。

面临的挑战

除了跨分片通信之外,sharding 仍然面临一些挑战。我们已经研究了单个分片被攻击的可能性,以及这种攻击可以通过对验证者进行随机选择和重新打乱分配的方式来加以抵制。但是,虽然这种随机性对于网络安全有利,但却使得节点更难计算分片的根和网络状态,因为节点无法提前访问他们将被分配的分片。

出于同样的原因,实现轻客户端获取有关整个网络状态的准确信息是比较难的。另一个需要注意的是欺诈识别。如果某个节点声称某个状态或交易组无效,那如何通知其他节点以便让他们可以监测并拒绝该欺诈行为呢?

持续进展时可能会出现更多的挑战,但令人兴奋的是,前文讨论的主要问题,大多数已经被研究团队解决了。

以太坊2.0发展路线图

以太坊2.0的开发正在进行中,其中考虑了五个重要的设计目标:安全性,去中心化,恢复力,持久性和简洁性。以太坊2.0的阶段0 (信标链) 大约会在2020年1月3号启动。为了确保达成上述目标,阶段0之后的各阶段将逐步推出,间隔期大约为一年。

阶段0将启动的信标链将是以太坊2.0的系统链,其功能已在前文讨论过。正是通过分片与信标链间的交联 (crosslinks) 来时间分片之间以及分片与整个网络之间的通信。

阶段1将引入基本的分片,实质上将是测试运行一个完全分片的系统将如何运作,因此,它不会立即展示分片的全部扩展性潜力。此阶段将解决分片链上的共识和确定性(finality),并将允许信标链监控分片链的执行。

阶段2将出现完全分片和集成的以太坊2.0。分片将从”基本数据制造者”升级为”全功能链”。阶段2也将引入全新的以太坊虚拟机 eWASM。

应该注意的是,虽然这些阶段在概念上是分开的,但由于它们是相互有关联的,大部分仍将同时进行。此外,开发人员仍在努力改进以太坊1.0区块链 (通常称为 Eth 1.x),也将继续推出以太坊2.0。

Eth 1.x的既定目标是通过优化客户端来提高交易吞吐量,执行”状态费用 (state fees)”以确保全节点的可持续运营,并稳定交易费用以及开发可以将 Eth 1.x 连接到 Eth 2.0 链的确定性小工具 (finality gadget)。

鉴于当前的阶段推出时间预测,我们可以预测性的在2020年底看到数据分片,并在2021年看到完全分片的以太坊。有许多才华横溢、充满激情的开发者正在致力于将这一梦想变为现实。我个人也希望分片可以成功实现,并且它将帮助以太坊和其他区块链实现大规模的扩展和采用。

特别感谢 Aidan Hyman、Greg Markou 和 Cayman Nava 审阅本文并提出许多有价值的建议。此外,这篇文章的撰写也离不开许多其他伟大的作者和研究人员在该领域所做的工作。感谢所有本文中引用的资料文件的创作者!

参考链接:

  1. “Ethereum 2.0.” https://medium.com/rocket-pool/ethereum-2-0-76d0c8a76605
  2. “Why Scaling Public Blockchains is a Lot Harder Than Just Increasing Block Size.” https://medium.com/gochain/why-scaling-public-blockchains-is-a-lot-harder-than-just-increasing-block-size-5c5e7ed53c38
  3. “Cryptocurrency Statistics.” https://bitinfocharts.com
  4. “Sharding FAQs.” https://github.com/ethereum/wiki/wiki/Sharding-FAQs
  5. “Ethereum Plasma — Part 1: Scaling Problems.”https://medium.com/@collin.cusce/why-business-needs-ethereum-plasma-now-scaling-problems-pt-1-8d6186438b5
  6. “Ethereum Plasma — Part 2: How It Works.”https://medium.com/@collin.cusce/why-business-needs-ethereum-plasma-now-how-it-works-key-components-pt-2-37a82737cd54
  7. “What is the Raiden Network?” https://raiden.network/101.html
  8. “Transcript: Scalable Blockchains as Data Layers.” https://medium.com/@trenton.v/transcript-scalable-blockchains-as-data-layers-vitalik-buterin-11aa18b37e07
  9. “Ether Nodes.” https://www.ethernodes.org/network/1
  10. “Sharding introduction R&D compendium.”https://github.com/ethereum/wiki/wiki/Sharding-introduction-R&D-compendium
  11. “What are Ethereum Nodes And Sharding?”https://blockgeeks.com/guides/what-are-ethereum-nodes-and-sharding
  12. “What is Sharding? Guide to this Ethereum Scaling Concept Explained.”https://blockonomi.com/sharding/
  13. “Ethereum 2.0 randomness.”https://www.youtube.com/watch?v=zqL_cMlPjOI
  14. “Phase 2, Proposal 1.” https://notes.ethereum.org/s/HylpjAWsE#
  15. “Fast Cross-Shard Transfers Via Optimistic Receipt Roots.” https://ethresear.ch/t/fast-cross-shard-transfers-via-optimistic-receipt-roots/5337
  16. “The Roadmap to Serenity.” https://media.consensys.net/the-roadmap-to-serenity-bc25d5807268
  17. Proposal 1:https://notes.ethereum.org/s/HylpjAWsE?source=post_page
  18. Proposal 2:https://notes.ethereum.org/w1Pn2iMmSTqCmVUTGV4T5A?viewPhase=&source=post_page

通过这种方式,即便某个用户在状态通道网络中只开启了一个或者两个通道,那该用户也可能可以与大量用户进行交易。

当然,通过直接的通道进行交易是无需手续费的,只需要抵押一定的 ETH 存款;但如果交易需要通过多个支付通道才能完成,那交易者可能需要为使用这些中介通道而支付一小笔手续费。这笔手续费会受到竞争性费用市场的影响,费用市场旨在将手续费维持在较低的水平,并与被发送的价值成正比 (即发送的价值越高,可能支付的手续费就相对更高)。

状态通道解决方案的一个最强大的特性是,由于状态通道中的交易不像在主链上那样需要整个网络达成共识,因此交易几乎可以在瞬间完成。此外,状态通道交易不会以任何方式阻塞主链,除非一次性创建并最终关闭所有的通道。[7]

与 Plasma 链一样,状态通道也是与 sharding 具有互补性的,且这两种以太坊扩展方案都正在被开发中。但不幸的是,与 Plasma 链一样,基于通道的解决方案也易于受到拒绝服务攻击。然而,正如之前已经指出的那样,这些攻击是可以被减轻的。简言之,雷电网络是一种将实现重大扩展性的通道解决方案,且在安全性或去中心化方面不会折衷到不可接受的程度。Sharding FAQ 解释道:”可以说,通过 sharding (以及其他技术) 实现的链上扩展和通过状态通道实现的链下扩展都是必要且互补的。” [4]

综上所述,人们已经探索了很多 Layer 1 方案用于扩展以太坊和其他区块链网络,同时不对网络的安全性和去中心化造成影响。一些方案已经失败了,其他一些方案也取得了有限的成果。

在经过大量研究之后,以太坊社区已经选择将 sharding 作为实现网络的大规模扩展并解决区块链的不可能三角悖论的最有前景的方案。Plasma 和状态通道等 Layer 2 解决方案将能够有与 sharding 一起使用,进一步扩展以太坊2.0网络。

Sharding

上文中我们探讨了一些旨在扩展以太坊和其他区块链网络的 Layer 2 扩展方案,下文中我们将讨论 sharding 这种被以太坊社区选择作为扩展以太坊网络的 Layer 1 解决方案。Sharding (分片) 被认为是实现以太坊网络大规模长期扩展的最佳方式。

Sharding 一词来自数据库术语,涉及到将一个大型的数据库分割成很多更小的、更易于管理的部分,以便能够更快、更有效地访问和处理数据。

对数据库进行分片将允许总数据量超过任何单个分片的容量。将区块链网络分割成很多分片以增加网络的扩展性,这与前者遵循相同的原则和目标,但实现起来会更加复杂。与 Casper 和 eWASM 一样,sharding 也是备受期待的以太坊2.0的主要特性之一。

比特币和其他区块链网络也已经考虑并试验了分片技术,以对交易处理或区块链状态进行分片,尽管其中大多数分片计划从未执行过。以太坊2.0的分片设想也将解决这两个主要瓶颈:对交易处理和区块链状态进行分片 [4]。根据 GitHub 上的官方 sharding FAQ:”我们希望能够每秒处理10,000多笔交易,而不需要强制每个节点都成为超级计算机或存储 TB 级大小的状态数据。这需要一个全面的解决方案,其中状态存储、交易处理、甚至交易下载和重新广播的工作负载都分摊在各个节点上。”[4]

这听起来很棒,但 sharding 实际上是如何工作的呢?

分而治之

在当前的以太坊网络上,每个节点必须验证每笔交易。这是确保网络活性的一个重要特性。即使80%的以太坊节点同时出故障,网络仍能正常运行。虽然让许多节点执行相同的操作实际上并不会使以太坊网络变慢,但这种方式并不一定能够使网络资源得到优化利用。

我们通过一个简单例子来展示如何更有效地使用以太坊的大量节点:假设以太坊网络上有三个节点,节点A、节点B和节点C。当前,为了验证某笔交易 (假设是数据T),每个节点必须分别验证T的整个数据集,以便对其进行确认。验证过程确保了网络的安全,但这会产生一个所有交易都必须经历的瓶颈:网络必须等到每个节点验证每笔交易,这样每秒处理的交易总数只能与每个节点的总交易容量一样。

但根据提议的 sharding (分片) 协议,T将被分解为T1、T2 和 T3。节点A、B 和 C 只需要处理这些较小的数据分片中的一个,就可以使整个数据集得以验证。

即便是在这个简单的示例中,通过将数据分解为三个集合也可以极大地提高吞吐量并减少交易时间。当以最佳的方式将 sharding 应用于以太坊网络中时,改进将是巨大的。在撰写本文时,以太坊网络上有超过8200个节点。[10]

根据最新的以太坊2.0规范,以太坊2.0区块链将被分成1024条分片链 [11]。由于每条分片链都将能够处理与当前以太坊网络一样多的交易量 (在实现 eWASM 之后会更多),sharding 将会使以太坊的吞吐量和网络速度提高 1,000 倍以上 [12]。此外,在增加了诸如 zk-rollups 和 Plasma 等 Layer 2 解决方案之后,还将进一步提高网络的吞吐量和交易速度。

Sharding, Casper & 信标链

在我们讲解 sharding 如何运作的细节之前,有必要了解一下 Casper:这是以太坊2.0将使用的一种 PoS (权益证明) 机制,旨在代替当前以太坊网络使用的 PoW (工作量证明) 机制。

Casper 将通过信标链得以实现,信标链将是以太坊2.0网络的系统链,确保整个网络的共识和状态的最终性 (finality),并将促进分片链之间的通信 (即跨分片通信)。

Casper 机制不会依赖于硬件挖矿来消耗能源和计算从而达成共识,而是将依赖于验证者来达成共识,验证者将需要质押 32 ETH 来成为以太坊2.0网络的验证者。

起初,sharding 和 Casper 是由不同的团队遵循不同的开发路线进行构建的,但从2018年春季开始,sharding 和 Casper 团队已经开始紧密协作,从而使这两个体制可以同时开发,并从彼此的进展中获益。验证者将通过 Casper 协议来对分片和信标链进行验证并达成共识。

由于以太坊的规模以及区块链技术的内在复杂性,对以太坊进行分片并非易事。区块链作家 Brian Curran 对其中的复杂性进行了解释:”…通过将节点分割成更小的子集,这些子集需要能够处理特定的交易集,同时更新网络状态,同时确保状态的有效性。”

这意味着进行了分片的以太坊网络如果想要与当前的网络一样正常运行,则必须开发一个复杂的系统来确定信标链和分片之间的职责分配,并建立分片之间以及分片与信标链之间的通信方式。该系统还必须包含一种机制,该机制将确保所有的网络数据和交易保持有效和可用,从而实现最终性 (finality)。

以太坊研究者和开发者一直在苦苦思索,什么样的系统才能最好地实现所有这些功能。

在进一步讨论之前,有必要指出,以太坊2.0提议的分片系统实际上还没有进入实际使用阶段。开发以太坊2.0客户端的团队仍在进行阶段0的工作,阶段0主要专注于信标链的实现。

Sharding 的许多细节仍在研究和开发中,但通过最新的以太坊2.0规范以及以太坊研究相关的文章,我们可以尝试设想提议的 sharding 模型。

共识 & 最终性

分片技术的引入以及从 PoW 到 PoS 系统的过渡,意味着在以太坊2.0网络中达成共识和最终性的方式将与当前的以太坊网络中有很大的不同。我们将从基本方面开始,然后详细介绍系统需要实现的一些更复杂的功能。

在以太坊2.0系统中,用户的账户都将特定于某个分片。与当前以太坊1.0链中的交易类似,每个分片中的交易将会相对简单,但分片之间的交易 (即跨分片交易) 将会使给系统增加一层复杂性。对此我们将在后文中加以论述。

在以太坊2.0中,交易将会按照当前正在开发的一个优化过程被分组到各个”交易包 (transaction packages)”中。这些交易包必须通过一个双重验证过程,以便添加到信标链主链上:

首先,验证者会被定期和随机地分配到各个分片链中。一旦被分配到某个分片链中,验证者就会对各个交易包的有效性进行投票。

如果验证者头赞成票,则信标链上的一个独立委员会必须通过一个分片管理者合约 (sharding manager contract) 来对该投票进行验证 [备注:信标链主链上将存在一个称为 sharding manager contract (分片管理者合约) 的智能合约,这个智能合约将负责管理主链如何接受所有分片中的数据和交易是否有效]。如果信标链委员会也投了赞成票,那该交易包就会被添加至主链中,成为公共账本的一部分,与该分片中的交易包建立一个不可篡改的交联 (crosslink)。[4]

在 sharding 的之后阶段,分片和主链之间的这种连接将是这样的:如果主链或其任何一条分片无效,则整个网络将被视为无效。就像在未实现 sharding 的区块链中一样,交易包的验证将带来网络状态的改变,这种改变将反映在诸如存储和账户余额等方面。[12]

经过一段时间 (根据当前的规范,也即每生成64个区块,约6.4分钟) 之后,每个分片中的验证者将被解除其职责,并重新返回到更大的验证者池之中,且信标链将会对每个分片重新随机分配验证者。[4]

信标链管理者所有验证者的登记表,通过 RANDAO 和 VDF 提供随机性,通过 Casper FFG 提供最终性,并记录跟踪信标链与分片之间的交联 (crosslinks)。在以太坊2.0的阶段2期间,信标链也将存储状态执行合约 [14]。

信标链通过采用 RANDAO 和 VDF (可验证延迟函数) 来提供随机性和不可预测性,防止潜在的攻击者试图预测他们的节点将被分配到哪个分片之中。其逻辑是,如果攻击者在分配之前不知道将被分配给哪个分片中,那么他们将无法提前配合发动攻击。

以太坊2.0系统通过对验证者进行随机选择和分配,并对交易包进行双重验证,以此来达成共识,保障网络安全不受攻击,并确保网络的最终性 (finality)。

跨分片通信

现在,我们对交易、分片和信标链之间的关系以及它们如何协同工作以便达成共识和最终性有了一定的理解。然而,为了使以太坊网络达到最大的效率,分片必须能够在彼此之间进行交易,并相互引用数据。这将需要网络上的各个分片之间进行通信。在去年布拉格举行的 Devcon 2018 大会上,以太坊创始人 Vitalik Buterin 对此进行了解释:

“想象一下, 以太坊被分割成数千个岛屿。每个岛屿都可以做自己的事情。每个岛屿都有自己的功能, 属于该岛的每个人 (即账户) 都可以交互, 他们可以自由地沉溺于其所有的功能中。如果他们想与其他岛屿接触, 就必须使用某种协议。”

这是一个很好的比喻,它提出了以太坊开发人员必须解决的最重要的问题之一:在实现分片所带来的巨大扩展性潜力的同时,如何实现多个不同的分片之间彼此通信,从而交付一个与当前以太坊网络一样的无缝集成系统?

正如 Vitalik 的岛屿类比所述,为了确保效率和安全性,各个分片之间的交互需要遵循一个特殊的协议。分片还需要知道何时适合进行彼此通信,并且只在需要时才进行通信 [12]。以太坊社区选择的通信协议称为”收据范式 (receipt paradigm)” [4],这些收据 (receipts) 将通过”分布式共享内存 (distributed shared memory)” 存储在信标链中,这意味着这些收据将只能被其他分片查看,而不能被分片修改。这个特性很重要,这允许各分片验证彼此的活动并从中获益,同时仍然维持每个分片的最终性。

早期的分片想法侧重于如何在分片之间最好地分配数据和职责。不过,Vitalik 最近公布了两项关于阶段2的新提议:Proposal 1 [17] 和 Proposal 2 [18]。

这两项提议的精神是”……有一个相对最小的共识层框架,该框架仍然提供足够的功能来开发复杂的框架,为我们提供作为第二层所需的所有智能合约功能。”[14] 为此,Vitalik 建议将单条分片的一些任务和责任委托给信标链。

之前的设计想法是,分片的功能类似于自治的以太坊区块链,具有自己的交易、ETH 和智能合约。通过该新提议,智能合约和 ETH 的基本级别的概念将只存在于信标链上,分片将继续拥有自己的状态和执行。这应该有助于降低每个分片的复杂性,同时维护网络的各种机能。

Vitalik 相信,新的以太坊系统将提供足够的功能来实现一个”支持分片中的智能合约、跨分片通信和所有其他功能的执行环境,我们希望使用信标链合约来构建这些功能。”

这个新系统将通过向信标状态添加三种新的交易类型和两种新的数据结构来完成。交易类型包括 NewExecutionScript、NewValidator 和 Withdrawal,这些交易分别代表着一个可以存储 ETH 的执行脚本,一个添加新的验证者的函数,以及一个从信标链中撤出验证者的函数。

这些新组件将用于促进跨分片通信,并交付这样一个系统,在这个系统中,所有 ETH 的交易和所有智能合约的执行都可以通过 Layer 2 abstraction 实现,而不需要将它们包含在分片中。通过使用信标链合约来引入这个抽象层将有助于将每个分片的复杂性降到最低,这将简化和改进分片之间的通信。

除了其固有的复杂性之外,跨分片通信的另一个问题是延迟性。如果我们想将一个代币从 shard A 发送到 shard B 中,shard A上将”销毁”那枚代币,并记录发送的地址和金额,以及目标分片。过一段时间后,每个分片将知道其他分片的状态根,这允许分片验证收据并确认该代币已经被转移了。此时,来自 shard A 的收据将由 shard B 回收,shard B 将验证该收据的有效性,以便该枚代币可以在 shard A 中进行销毁,并在 shard B 中找回。

这个过程会导致交易在被发送和实际被确认时间产生延迟,这会降低用户体验,并影响以太坊2.0应该提供的速度和扩展性 [15]。对此问题提出的解决方案称为 Fast Cross-Shard Transfers Via Optimistic Receipt Roots,其中的离你那很简单,即存储有条件的状态,并对提交的交易的有效性”保持乐观”。

一旦交易被验证,如果交易确实有效,则交易将被永久记录,反之则将被逆转。分片之间的通信是以太坊2.0开发人员仍在研究的最复杂的问题之一。以太坊2.0想要保留当前1.0链的优点,同时大大提高其扩展性,就必须要成功地实现跨分片通信。

面临的挑战

除了跨分片通信之外,sharding 仍然面临一些挑战。我们已经研究了单个分片被攻击的可能性,以及这种攻击可以通过对验证者进行随机选择和重新打乱分配的方式来加以抵制。但是,虽然这种随机性对于网络安全有利,但却使得节点更难计算分片的根和网络状态,因为节点无法提前访问他们将被分配的分片。

出于同样的原因,实现轻客户端获取有关整个网络状态的准确信息是比较难的。另一个需要注意的是欺诈识别。如果某个节点声称某个状态或交易组无效,那如何通知其他节点以便让他们可以监测并拒绝该欺诈行为呢?

持续进展时可能会出现更多的挑战,但令人兴奋的是,前文讨论的主要问题,大多数已经被研究团队解决了。

以太坊2.0发展路线图

以太坊2.0的开发正在进行中,其中考虑了五个重要的设计目标:安全性,去中心化,恢复力,持久性和简洁性。以太坊2.0的阶段0 (信标链) 大约会在2020年1月3号启动。为了确保达成上述目标,阶段0之后的各阶段将逐步推出,间隔期大约为一年。

阶段0将启动的信标链将是以太坊2.0的系统链,其功能已在前文讨论过。正是通过分片与信标链间的交联 (crosslinks) 来时间分片之间以及分片与整个网络之间的通信。

阶段1将引入基本的分片,实质上将是测试运行一个完全分片的系统将如何运作,因此,它不会立即展示分片的全部扩展性潜力。此阶段将解决分片链上的共识和确定性(finality),并将允许信标链监控分片链的执行。

阶段2将出现完全分片和集成的以太坊2.0。分片将从”基本数据制造者”升级为”全功能链”。阶段2也将引入全新的以太坊虚拟机 eWASM。

应该注意的是,虽然这些阶段在概念上是分开的,但由于它们是相互有关联的,大部分仍将同时进行。此外,开发人员仍在努力改进以太坊1.0区块链 (通常称为 Eth 1.x),也将继续推出以太坊2.0。

Eth 1.x的既定目标是通过优化客户端来提高交易吞吐量,执行”状态费用 (state fees)”以确保全节点的可持续运营,并稳定交易费用以及开发可以将 Eth 1.x 连接到 Eth 2.0 链的确定性小工具 (finality gadget)。

鉴于当前的阶段推出时间预测,我们可以预测性的在2020年底看到数据分片,并在2021年看到完全分片的以太坊。有许多才华横溢、充满激情的开发者正在致力于将这一梦想变为现实。我个人也希望分片可以成功实现,并且它将帮助以太坊和其他区块链实现大规模的扩展和采用。

特别感谢 Aidan Hyman、Greg Markou 和 Cayman Nava 审阅本文并提出许多有价值的建议。此外,这篇文章的撰写也离不开许多其他伟大的作者和研究人员在该领域所做的工作。感谢所有本文中引用的资料文件的创作者!

参考链接:

  1. “Ethereum 2.0.” https://medium.com/rocket-pool/ethereum-2-0-76d0c8a76605
  2. “Why Scaling Public Blockchains is a Lot Harder Than Just Increasing Block Size.” https://medium.com/gochain/why-scaling-public-blockchains-is-a-lot-harder-than-just-increasing-block-size-5c5e7ed53c38
  3. “Cryptocurrency Statistics.” https://bitinfocharts.com
  4. “Sharding FAQs.” https://github.com/ethereum/wiki/wiki/Sharding-FAQs
  5. “Ethereum Plasma — Part 1: Scaling Problems.”https://medium.com/@collin.cusce/why-business-needs-ethereum-plasma-now-scaling-problems-pt-1-8d6186438b5
  6. “Ethereum Plasma — Part 2: How It Works.”https://medium.com/@collin.cusce/why-business-needs-ethereum-plasma-now-how-it-works-key-components-pt-2-37a82737cd54
  7. “What is the Raiden Network?” https://raiden.network/101.html
  8. “Transcript: Scalable Blockchains as Data Layers.” https://medium.com/@trenton.v/transcript-scalable-blockchains-as-data-layers-vitalik-buterin-11aa18b37e07
  9. “Ether Nodes.” https://www.ethernodes.org/network/1
  10. “Sharding introduction R&D compendium.”https://github.com/ethereum/wiki/wiki/Sharding-introduction-R&D-compendium
  11. “What are Ethereum Nodes And Sharding?”https://blockgeeks.com/guides/what-are-ethereum-nodes-and-sharding
  12. “What is Sharding? Guide to this Ethereum Scaling Concept Explained.”https://blockonomi.com/sharding/
  13. “Ethereum 2.0 randomness.”https://www.youtube.com/watch?v=zqL_cMlPjOI
  14. “Phase 2, Proposal 1.” https://notes.ethereum.org/s/HylpjAWsE#
  15. “Fast Cross-Shard Transfers Via Optimistic Receipt Roots.” https://ethresear.ch/t/fast-cross-shard-transfers-via-optimistic-receipt-roots/5337
  16. “The Roadmap to Serenity.” https://media.consensys.net/the-roadmap-to-serenity-bc25d5807268
  17. Proposal 1:https://notes.ethereum.org/s/HylpjAWsE?source=post_page
  18. Proposal 2:https://notes.ethereum.org/w1Pn2iMmSTqCmVUTGV4T5A?viewPhase=&source=post_page
返回顶部