以太坊基金会博客

Eth2 Staking系列:分片共识

来源 | Ethereum Blog

作者 | Carl Beekhuizen

特别感谢Sacha Yves Saint-Leger和Joseph Schweitzer的审校。

分片 (Sharding) 是eth2相较于eth1的诸多改进之一。“分片”是从数据库研究中借用而来,意味着整体数据的一部分。与数据库语境相同,在eth2中,分片意味着将整个系统的存储和计算分割为分片,并独立处理各分片,然后根据需求组合结果。确切来说,eth2将实现许多分片链,其中每个分片具有与eth1链相似的功能,这对于扩展性来说是巨大的提升。

然而,eth2中存在一种鲜为人知的分片类型。从协议设计的角度来看,这可能更加令人兴奋——输入分片共识。

 

分片共识

就像速度最慢的节点处理能力有限,整个网络吞吐量都会受限,单个验证者的计算资源也限制了可以参与共识的验证者总数。由于每个新加入的验证者都会为系统中所有其他的验证者带来额外的工作量,因此资源最少的验证者将无法继续参与(因为无法再跟踪其他验证者的投票) 。为此,eth2的解决方案是分片共识 (sharding consensus)。

 

“拆分”式设计

在eth2中,时间被分为两种期间,即时隙 (slots)时段 (epochs)

一个时隙 (slot) 指12秒的时间范围,期间理想状态下一个新区块会被添加到链上。区块是一种机制,除了打包交易,还将包含验证者的投票。

一个时段 (epoch) 由32个时隙(6.4分钟)组成,在此期间,信标链将执行维护该链所需的所有计算,包括证明并最终确定新区块,以及对验证者实施奖惩措施。

正如在本系列第一篇文章 (中文版) 中讨论到的,验证者会被组织成委员会 (committees) 的形式来执行工作。无论何时,每个验证者都同时是一个信标链和一个分片链委员会的成员,并被要求每个时段 (epoch) 进行一次证明 (attestation),其中证明是针对已经被提议了一个时隙 (slot) 的信标区块的投票。

Eth2分片共识的安全模型是基于一个思想,即委员会或多或少是整个验证者集的准确统计表示。

例如我们遇到这样一种情况:集合中有33%的恶意验证者,那么他们最终很有可能会进入同一委员会。这对于安全模型来说简直惨不忍睹。

因此我们需要寻求一种方法来杜绝这种情况。换句话说,我们需要确保假如33%的验证者是恶意的,那么一个委员会里最多只能分配到大约33%的恶意验证者。

我们可以通过以下两种方式达到该目的:

  1. 保证委员会成员随机分配
  2. 每个委员会中要有验证者数量最低限制

举个例子:每个委员会有128个随机抽样的验证者,1/3的恶意验证者控制2/3委员会的可能性非常小(概率小于2 ^ -40)。

 

“合并”式设计

验证者的投票即证明 (attestations)。一个证明由许多部分组成:

  • 针对目前信标链头的投票
  • 针对哪个信标区块应当被证明/最终确定的投票
  • 针对分片链当前状态的投票
  • 投票同意的所有验证者签名

通过将尽可能多的元素聚合成一个证明 (attestation),可以提高系统的整体效率。之所以能有这种效果,是因为节点只需要针对证明 (attestations) 进行计算就可以获知信标链和每个分片链的状态,而无需对信标区块和分片区块的投票和签名进行独立检查。

如果每个验证者都产生自己的证明 (attestation),并且每个证明都需要由所有其他节点进行验证,那么作为一个eth2节点的成本将会非常高。这就是聚合 (aggregation) 要解决的问题。

证明 (attestations) 在设计时就遵循了易组合的理念,如果两个及以上验证者都有针对相同投票的证明,那么就可以将这些证明的签名字段添加进一个证明中,从而对这些证明进行组合。这就是证明聚合 (aggregation)

就其结构而言,委员会内部的投票都是易聚合的,因为被分配在同一个分片中的验证者针对该分片状态和信标链的投票应该是相同的。这就是eth2扩展验证者规模的机制。通过将验证者分配到委员会中,验证者只需要关注同一委员会中的其他验证者,并且仅需验证来自其他委员会的非常少的聚合证明 (aggregated attestations)。

签名聚合

Eth2将使用BLS签名,这是一种在多条椭圆曲线上定义的、聚合友好的签名方案。在特定的曲线上,每个签名是96字节。

如果ETH总量的10%被质押到eth2中,那么将大约有 35万验证者。这就意味着一个时段 (epoch) 的签名大小将是33.6 MB,每天就是大约7.6 GB。如果按照这种趋势,那么2018年有关eth1状态大小达到1TB的谬论,将会在eth2实现之后的133天之内就成为现实 (且仅基于签名而言)。

BLS签名的妙处在于它是可以聚合的:假如Alice产生了签名A,Bob对同一个数据进行签名为B,那么Alice和Bob的签名可以聚合成为签名C (C=A+B),由此来进行存储和检查。通过使用签名聚合,每个委员会只需存储并检查一个签名。这样一来,每天的存储需求就降低至2MB以下。

 

结语

通过将验证者分配到委员会中,验证eth2所需的工作量减少了几个数量级。

对于信标链和所有分片链的验证节点来说,他们只需要查看每个委员会的聚合证明 (aggregated attestations) 即可。如此一来,节点既可以获知每个分片的状态,同时还能获知验证者对于哪些区块是否被添加到链上的意见。

总的来说,委员会机制帮助eth2达成了两个设计目标(在本系列首篇文章中提及过):即在消费级笔记本电脑上就可以参与eth2网络,且eth2必须支持尽可能多的验证者以实现最大程度的去中心化。

数字也许更具象,虽然大多数拜占庭容错式的PoS协议都可以扩张至数十个验证者 (在个别情况下,甚至可以扩展到数百个),但 eth2能够支撑数十万个验证者,并且不需要在网络延迟和吞吐量方面折衷就能保证安全性。

 

Eth2 Staking系列其他文章:

如何参与ETH2 STAKING(开篇)

参与ETH2 STAKING系列:激励篇

ETH2 STAKING系列:共识机制篇