区块链的网络模型—同步模型

  • 盖盖
  • 更新于 2020-01-18 08:14
  • 阅读 5113

网络模型是区块链系统诸多性质的基石。这一系列的文章将就此展开话题,主要讨论不同的网络模型对共识协议的影响。本文主要讨论最基础的网络模型——同步模型。

比特币的火热引发了对其背后的区块链技术研究的热潮,各种新型的区块链系统层出不穷。我们都知道区块链的核心是共识协议,但当我们谈论共识协议的时候却经常忽略其背后的网络模型。在实际生活中,网络总是不可靠的,尤其是区块链这样的分布式系统,网络性能往往受到“木板效应”的影响。任何网络都是有延迟的,对网络延迟的建模就是网络模型。如果我们假设所有的网络延迟都是由一个攻击者控制的,那么网络模型就代表了攻击者对消息延迟的控制能力。攻击者的能力越强,模型假设就越弱,协议设计也就越复杂。根据攻击者攻击能力的不同,产生了区块链系统中目前最常见到的三种网络模型:同步模型异步模型半异步模型。本文主要讨论同步模型

同步模型

同步模型(Synchronous model)是一种最简单网络模型也是被研究时间最久的模型。同步模型假设攻击者的能力很有限,所有消息都能在 T 时间内到达。并且 T 是已知的,或者说是可以测量出来的。

在这种简单的模型下,协议的设计也可以非常简单。例如,协议可以按“轮(round)”进行,每一轮的时间就是 T。由于我们假设了所有消息都可以在 T 时间内到达,那么就可以保证在每一轮结束之前,每个节点都收到了这一轮中来自其它节点的消息。

依赖同步模型的协议看似实现起来很简单,但实际上却很不实用,原因主要有三个:第一,为了满足同步假设不被破坏,同步共识协议一般要求每个节点锁步(lock-step)执行,即所有节点都要时钟同步,既要同时开始某一轮,也要同时结束这一轮。这对工程实现非常高。第二,一旦某个节点遭受攻击失去同步,可能导致整个系统出错,鲁棒性不强。第三,为了尽量满足同步假设,每一轮的执行时间一般会设置的比较大(保证每个节点都能在T的时间内收到消息),因此会损失性能。

同步拜占庭共识

区块链系统从本质上解决了拜占庭共识(Byzantine Agreement,BA)问题[1],即使系统中有一部分节点(拜占庭节点)可以不遵守协议运行(宕机或者任意攻击行为),系统中的诚实节点仍然可以达成共识。一个安全的拜占庭共识协议必须提供以下几个性质:

  • 一致性(consistency):如果其中一个诚实节点共识结果是 v,另一个诚实节点共识结果是 v',那么 v=v'
  • 有效性(validity):如果所有诚实节点的输入都是 v,那么所有节点的共识结果都是 v
  • 终止性(termination):所有诚实节点最终都会达到共识。

如果一个系统中全是诚实节点,并且网络也是同步的,那么显然系统很容易达到共识。但当网络中存在拜占庭节点时,问题就变得复杂。具体一个系统能够容纳多少的拜占庭节点,很大程度上取决于其依赖的网络模型。一般意义上,同步系统能够容纳小于总结点数一半的拜占庭节点。异步系统能够容纳小于总结点数三分之一的拜占庭节点。在本文我们只讨论同步系统。

在同步系统中,假设恶意节点数是 f,总结点数为 n,那么为了保证系统安全,必须满足 n>2f。在每轮投票中,对于某个值 v 的投票必须满足票数大于 f+1。证明非常简单,本质上就是少数服从多数。正是因为同步模型假设了在每轮投票中我们能收到所有来自诚实节点的投票,所以我们只要保证诚实节点数量(n-f)大于拜占庭节点数就可以了(f),即 n-f>f

在上文中也提到,由于同步模型的种种弊端,基于同步模型的拜占庭共识协议几乎只停留在论文当中,直到比特币的出现改变了这一切。

同步模型下的比特币

比特币可以被称为第一个实用的同步拜占庭共识协议[2]。虽然底层的网络环境仍然不可预测,但这个同步协议却从十年前诞生一直蓬勃运行至今,甚至生命力愈加旺盛,不得不说是一个奇迹。比特币最大的创新之处就是提出了将工作量证明(Proof-of-Work, PoW)和最长链原则(longest-chain principle,LCP)结合,并引入比特币作为激励手段,鼓励诚实节点遵守协议(只有遵守协议才能获得最大收益)。工作量证明和最长链原则都不是什么高新的技术,但两者的结合让比特币迸发出巨大的能量。

从模型上看,比特币中的矿工就是共识系统中参与投票的节点,但与传统系统不同的是,由于比特币运用了工作量证明算法,节点是按算力参与投票的。因此在比特币中,f 代表恶意节点所掌握的算力总和,而 n 代表全网算力的总和。当 f>n/2的时候,比特币就不再安全,即著名的 51%攻击。

工作量证明要求每一轮出块的时间非常长,并且会根据全网算力的总量调节工作量,使得区块生成的时间一直稳定在 10 分钟左右。正是由于出块时间远远大于区块在网络中传播的时间,才使得在同一时间有两个或多个矿工同时产出多个区块(即分叉)的概率非常小。网络中绝大部分节点都能在这 10 分钟之内接收到新产生的区块,并快速进入下一轮。即使有部分节点的网络故障失去同步,也能够从其它节点出获得区块,快速赶上最新进度。

产生分叉的概率小,并不代表不会产生分叉。那么比特币如何解决分叉?最长链原则。当有分叉产生时,选择最长的链继续工作。为什么要选最长的?这里就用到了比特币作为激励手段。只有基于在最长链产生的区块才有更大的可能被全网确认,从而获得比特币,否则工作量很可能会白费。也就是说,遵循最长链原则才能获得最大的经济利益。需要注意的是,我在描述的时候用了很多“可能”。这是因为比特币在每轮达成的共识都是不确定的(有可能被以后的更长链取代),所以这就是为什么在用比特币做交易时需要等待大约 6 轮(连续被之后的 6 个区块确认)才能有极大的可能性保证当前这一轮的共识结果不被取代。

虽然工作量证明和最长链原则双剑合璧解决了同步模型下的拜占庭共识问题,但代价就是牺牲了性能和最终性(finality)。每 10 分钟才能出一个块,6 次确认才能极大概率保证区块不会被取代。尽管如此,比特币巨大的成功重新点燃了学术界对实用拜占庭共识协议的研究。为了克服比特币的性能缺陷,越来越多新的区块链协议被提出。其中基于同步模型的研究包括 Sync HotStuff [3] 和 PILI [4],但它们的应用领域主要还是面向联盟链,无法支持大量用户参与。

总结

本文主要介绍了区块链系统的网络模型中最基础的同步模型。比特币的出现将同步模型从论文带进了现实,但由于同步模型的限制,这一类的系统无法承担大规模的计算任务。因此更加实用的还是基于异步或者半异步的共识协议,在下篇文章中将介绍这一类协议。

扩展阅读

[1] Generalized Communication and Security Models in Byzantine Agreement

[2] The Bitcoin Backbone Protocol: Analysis and Applications

[3] Sync HotStuff: Simple and Practical Synchronous State Machine Replication

[4] PiLi: A Simple, Fast, and Robust Family of Blockchain Protocols

点赞 6
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
盖盖
盖盖
加拿大不列颠哥伦比亚大学电子工程系在读博士,同时作为区块链研发工程师在Dapper Labs兼职,主要负责Flow Blockchain的共识算法研发。主要研究方向是分布式系统,拜占庭容错,区块链共识算法,信息安全等。曾参与Solidity中文文档翻译,参与编写《深入以太坊智能合约开发》。曾在国际会议和期刊上发表多篇论文。 主页:https://fangyugai.me/