文档章节

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

Zilliqa
 Zilliqa
发布于 2018/11/28 17:24
字数 2279
阅读 66
收藏 0

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来解决这个挑战。 敬请关注!

 

© 著作权归作者所有

Zilliqa
粉丝 0
博文 19
码字总数 40140
作品 0
东城
私信 提问
你想知道的都在这里:Zilliqa CTO贾瑶琪回答社区成员自由提问

前言 11月9日(周五)晚20:00,Zilliqa CTO贾瑶琪微信做客TokenGazer举办的《一问到底》活动,与社区成员进行了全程自由问答互动。活动原定时间为1个小时,在社区成员的积极参与和热情推动下...

Zilliqa爱好者中文社区
2018/11/14
0
0
【超越白皮书5】BFT类共识协议概览与分析实测

本报告由火币区块链研究院出品,报告发布时间2018年9月6日,作者:袁煜明、胡智威。 摘要 本文首先对BFT类共识协议按照改进思路分为3大类进行综述性概览: 针对无拜占庭错误场景优化的协议,...

火币区块链研究院
2018/09/07
0
0
zilliqa的Scilla,一种实现区块链并行计算的智能合约语言

我们在前面的文章中介绍了Zilliqa,市面上第一个利用分片技术实现了比较高的TPS的区块链公链。我们曾经提到,Zilliqa的智能合约语言叫Scilla,是一种主要针对基于区块链并行计算的应用而设计...

苍天鸭
04/18
0
0
这些数字精灵住在以太坊网络上,但是他们在Zilliqa网络上战斗

在我唯一的“精灵”升级到第四级之前,我的以太坊就用完了。 这就是我第一次玩Etheremon这个游戏的体验。这是一款建立在世界第二大区块链网络以太坊上的仿效Pokemon的游戏。我当时正好有相当...

Zilliqa爱好者中文社区
2018/09/25
0
0
zilliqa,第一个实现了分片技术提升性能的公链

分片的技术一直在区块量行业被提起,但以太网络的分片推进也是相当的缓慢。相反,Zilliqa,作为第一个使用了分片技术用来提升整体网络吞吐量的公链,已经上线了。在Zilliqa自己的测试网络上,...

苍天鸭
04/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
20分钟前
13
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
21分钟前
12
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
25分钟前
12
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
34分钟前
11
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
37分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部