Zilliqa 的设计构思 第2部分:共识协议

7 个月前 创建于

2017年10月29日,Zilliqa博客发布, Rita翻译

欢迎加入我们的社区,向我们提问并获取最新(希望也是最棒的)资讯!

从上篇文章起,我们开始通过系列文章介绍Zilliqa的设计和协议内容。 上篇我们介绍了Zilliqa可扩展性的核心思想 — — 分片(Sharding),即Zilliqa的交易吞吐量可以随网络规模增大而近似线性增长。

在本文中,我们将介绍Zilliqa的第二个最关键的组成部分 — — 共识机制。虽然阅读此前的文章会对理解这篇有所帮助,但这篇也可独立阅读,因为并不需要太多的背景知识。

让我们先快速回顾一下上篇文章 — —

第1部分网络分片。通过网络分片,Zilliqa将全网分成一系列包含更少节点的群组,这样的每个群组被称为分片(Shard)。

所有分片能并行地处理交易并因此产生高吞吐量。 出于安全原因,分片必须足够大,比如说包含600多个节点。 Zilliqa使用PoW进行网络分片。

共识协议对高吞吐量的重要性

网络分片本身无法保证交易的高吞吐量,这是因为吞吐量也取决于每个分片对新一组交易达成一致的时间以及提出下一个区块的速度。

达成一致需要一个有效的共识协议。 对于Zilliqa来说,理想的共识协议应该可以利用分片小的优势并使每个分片快速达成共识。

直接使用比特币或以太坊的共识协议如何?

有些读者可能会注意到,上面提到的分片大小比普通的区块链P2P网络(比如比特币或以太坊)小得多,这些普通的区块链网络通常由数万个节点组成。那么,为什么Zilliqa不能在每个分片中直接使用与比特币或以太坊相同的共识协议呢?这样的话,由于分片大小比常规网络小得多,所以分片上各成员达成共识也可以快得多,对吗?

这听起来很自然,但是不能仅仅因为分片很小,就认为它一定能够使共识协议加速。

要理解这一点,让我们先看看目前在比特币和以太坊上使用的共识协议。这两个区块链平台都采用了Nakamoto共识(Nakamoto consensus,以其发明者中本聪Satoshi Nakamoto命名)。

Nakamoto共识是一个非常简单的概率共识机制,它的工作原理如下:在大致固定的时间间隔内,网络选举产生一名领导,该领导提出下一个区块的提案。然后他将该区块信息广播给各网络节点,由各节点决定接受或拒绝它。领导者提出尊重系统规则的有效的提案,例如避免双倍花费的区块(以下简称双花)是有奖励的。

Nakamoto共识的关键是领导人的选举方式。在大致有规律的时间间隔内,网络中的每个节点都会做一个PoW,做的最快的节点成为领导者。显然每个节点做PoW必须足够努力,因为只有一个领导者。

计算密集型的PoW需要大量的时间进行计算并且可能减慢共识协议,且它与网络中的节点数量无关,而是取决于网络的集体计算能力。因此,如果Zilliqa直接使用PoW作为共识机制,那么就不能很好地利用分片小的优势,这就是为什么Zilliqa需要一个不同的共识协议。

实用拜占庭容错(Practical Byzantine Fault Tolerance, 简称为PBFT)

Zilliqa采用PBFT在每个分片中达成共识。该协议是由卡斯特罗和利斯科夫(Castro and Liskov)在1999年提出的。它是在这样的假设下运行的:在执行协议之前,假设每个分片中最多有1/3的节点是恶意的。

我们选择PBFT作为我们的共识协议有几个原因,主要的一点是它的效率取决于网络的大小,因此可以更好地利用分片小的优势,本文稍后会讨论PBFT的其他优点。

在PBFT中,一个共识组中(即一个分片中)的所有节点按顺序排列,它有一个主节点(又名领导者),其他节点被称为备份节点。每轮PBFT都有三个阶段,如下所述:

1、预准备阶段(Pre-prepare phase):在这个阶段,领导者宣布其所在分片应达成一致的下一条记录,这是通过发送“预准备”消息完成的。

2、准备阶段(Prepare phase):在收到预准备消息后,每个节点验证记录的正确性和有效性,并向所有其他节点组播“准备”消息。

3、提交阶段(Commit phase):在收到来自绝对多数人的准备消息后,每个节点向该分片组播一个提交消息。最后,每个节点都等待来自绝对多数人的提交消息,以确保有足够数量的节点同意领导者提出的记录。

在三个阶段结束时,所有诚实的节点要么接受要么拒绝领导者提出的记录。

PBFT需要正确的领导者启动每个阶段,并在足够多数确定后运行它。如果领导者是恶意的,它可能会拖延整个共识协议。为了应对这一挑战,PBFT提供了一个视图变更协议(view change protocol)从而替换掉恶意的领导者。如果节点们在一定时间内没有看到任何进展,他们可以独立宣布改变领导者的愿望。如果有足够多的节点认为领导者有问题,那么系统将会使用已知的调度算法(如轮流调度round-robin)选出下一个领导者来继续运行协议。

PBFT的其他优点

PBFT除了可以利用分片小的优势外,与Nakamoto共识协议相比它还有其他几个优点。

1、交易最终性(Transaction finality):PBFT赋予了共识决定的最终性,这意味着如果通过PBFT所有的好的节点就下一个区块提议达成共识,那么所提议的区块是最终的并且肯定可以达成一致,即在这种共识中是不需要确认的。这与Nakamoto共识相反,因为在Nakamoto共识中达成一致只是概率性的,因此需要6次、大约相当于1小时的确认从而为双花攻击提供缓冲。

2、低能耗:由于PBFT不是计算密集型的,它减少了矿工的能源消耗。实际上,Zilliqa只使用PoW来防止女巫节点攻击、确认节点身份并进行分片,而不用于达成共识。这意味着,一旦节点确认了身份标识,就可以在多轮中连续多次运行PBFT从而确认多个区块。现实中,每确认大约100个区块才需要做一次PoW。这与Nakamoto共识不同,因为在该共识中每确认一个区块就需要做一次PoW。

3、报酬差异小(Low reward variance):不同于比特币赢者通吃的奖励机制,Zilliqa中参与共识协议的每个矿工都可以获得对应的奖励。PBFT共识协议需要通过签名消息对一条记录投票以进行集体决策。因此,通过使用PBFT可激励每个参与的节点,这将减小矿工之间的报酬差异。这与Nakamoto共识相反,因为在该共识中下一个区块仅由领导者提出。

PBFT的挑战

PBFT显然是Zilliqa非常有前景的共识协议解决方案。 然而它有一个主要缺点:只有当分片规模很小时(即小于50)才高效。但是,正如我们前面的文章中所讨论的,出于安全原因,Zilliqa的分片大小必须不少于600个节点。

PBFT对于大型网络而言效率低下的主要原因是它有一个潜在的通信成本,即 分片中的每个节点都必须与所有其他节点通信,这就是通信成本二次方的原因。

在下篇文章中,我们将介绍Zilliqa如何用PBFT来解决这个挑战。 敬请关注!

我们很高兴地邀请您加入我们的社区,与技术专家、金融业者和加密数字货币爱好者们一同探讨!您可以通过以下方式关注我们的进展:

微博:https://weibo.com/zilliqa

微信公众号:ZilliqaCN

Zilliqa中文社区联盟:http://www.zilliqa.com.cn

关注我们的推特:https://twitter.com/Zilliqa

通过邮箱订阅我们的新闻:http://zilliqa.us16.list-manage.com/subscribe?u=52acaef93d75cf69065e355ff&id=11f0b30bdd

关注我们的博客:https://blog.zilliqa.com/

Reddit:https://www.reddit.com/r/zilliqa

Slack:https://invite.zilliqa.com/

Gitter:https://gitter.im/Zilliqa/

电报群:https://t.me/zilliqachat