让POW的共识机制再也不成为公链系统吞吐率的瓶颈 | Conflux CTO伍鸣

图片描述Conflux项目的CTO 伍鸣在Odaily星球日报与36Kr集团共同主办的2018 P.O.D New BlockTrend新区势区块链峰会上就《Scaling Nakamoto Consensus to Thousands of Transactions per Second》(将中本聪共识的吞吐率提高到每秒数千次交易)发表演讲,对于基于POW机制的扩容提出了新看法。算法

伍鸣从中本聪共识机制的工做原理出发,指出简单的在共识机制中增大区块容量以及提升出块率的方式并不可取,这两种方式均会使区块在网络上传播的延时相对变长,从而在帐本中产生不少分叉,不只浪费计算和网络的资源,也危害了安全性。编程

对此,伍鸣介绍,Conflux利用区块链中交易少冲突的特色,乐观的处理并发块,且将区块经过父边和引用边组织成有向无环图(DAG),同时创新的将Ghost规则和Epoch的概念相结合,从而使参与协议的机器节点可以在一致的帐本结构中决定一致的交易全序。Ghost规则保证的了主链的选择没法被逆转,DAG和Epoch帮助肯定一致的交易全序。经过这样的技术,Conflux可以在防治双花攻击的同时将分叉上的区块变为有效从而提高有效区块的比例,进而可以将公链系统的吞吐率提高到每秒上千次交易,且可以在分钟级别的延时内确认交易。在Conflux中,系统的吞吐率瓶颈已再也不是共识机制自己,而在于网络带宽以及每一个节点局部的计算处理能力。缓存

如下为伍鸣博士的演讲实录:安全

你们好,今天很高兴有机会给你们介绍一下咱们的Conflux项目,它是一个创新的公链系统,它主要的优点特色是可以将基于工做量证实的中本聪共识机制的吞吐率提高到每秒上千条交易的量级。网络

咱们先来看一下问题的背景。现现在,区块链和数字货币在业界已经产生了至关大的影响力。也有愈来愈多的人开始关注它。以比特币为表明的区块链技术已经发展成为一能够个在互联网级别上支持安全的,一致的,分布式的交易帐本的平台。这个平台进而带动了金融科技,供应链,和医疗健康等应用领域的技术创新。全球的数字货币市场也支撑着千亿美圆的市值。架构

然而,尽管如此,性能和效率问题仍然是现有的区块链系统一个很大的痛点。这使得现有的区块链的用户体验很糟糕,好比很长的处理延迟,以及高昂的交易费用。同时也限制了在区块链系统上开发更有意义的应用的能力。咱们都知道,比特币每秒能够处理大概7个交易,以太坊是每秒30个交易。而像visa这样的中心化的交易服务能够支持每秒上千个交易的吞吐率。并发

咱们先来简单的看一下比特币中的共识机制是如何工做的。在这个协议里面,交易是被打包到区块里面的。全部的区块造成了一个链,这个链表示了交易的历史纪录。每个参与这个协议的机器节点都会想要去产生一个新的区块并在该区块里打包新的交易,而且经过将前一个区块的哈希值存入新区块的头部信息来将新区快链在区块链的尾部。这个协议经过使用工做量证实以及最长链规则来让全部的机器节点对区块链的状态达成共识。同时,它维持了一个很慢的全网的平均出块率以及相对较小的区块大小。
图片描述app

假设图中是一个区块链的当前的状态,假设一个攻击者想要逆转区块n-2中的一个交易,他就会想要从区块n-3后面引入一个分叉来使区块n-2变得无效。可是与此同时,全部的诚实的节点都会遵循最长链规则从而将他们新产生出来的区块链在最长链的尾部。因为系统维持了很低的出块率和较小的块大小,网络延迟相对于出块时间来说是比较小的,因此这些诚实的节点所产生的区块基本上就是顺序的。这样的话,只要诚实节点的总算力超过50%,攻击者就不可以使他本身产生的链成为最长链。分布式

但有人接下来可能会问,是否是能够经过增长出块率或者增大区块的大小来提升系统的吞吐率?简单的在中本聪共识机制里面这样去作是有问题的。由于不管是增大块的大小仍是增长出块率都会使得区块产生的时间和区块在网络上传播的延迟相比变得相对较小。这就使得一个新块在产生之后还来不及传播到全网就会有其余的节点产生另外的新块,因而就在区块链上产生了分叉。虽然整个系统最终会收敛到某一个最长的分叉上,可是出块率和块大小越大的话,分叉的状况就会愈加严重,分叉也会进一步出如今已有的分叉上。因此最终区块链的帐本就发展成这个样子,就是有不少的分叉。性能

这带来两个问题。第一,这些分叉浪费了网络和计算资源,由于只有最长链中的区块才被认为是有效的。第二,它危害了安全性,由于整个区块链里的最长链变短了,这使得攻击者只须要少于50%的算力就能够产生出恶意的最长链了。
图片描述

那接下来咱们来看一下Conflux是如何解决这个问题的?咱们注意到,在比特币中的这种基于链的共识机制里,它本质上对交易的执行顺序有一个严格的限制,也就是交易的执行顺序要和他们所在的区块的产生的顺序是一致的。好比在这个例子中,若是区块1是在区块0以后产生的,它隐含的意思是说,区块1中的交易都要发生在区块0的后面。一样当区块2产生在区块0后面,它也隐含了相同的意思。因此假如后面的区块3,4,5,链在了区块1的后面,区块2就会被丢掉,由于咱们没法肯定它的交易应该怎么去排序。

可是咱们若是仔细观察的话,实际上区块链的系统里面,不少的交易是没有冲突,因此它们能够按任意的顺序执行,只要全部的参与节点都赞成一个顺序就能够了。那么基于这样一个观察,咱们Conflux的主要的核心想法就是这样的。咱们首先乐观的处理这些可能并发的区块,而后咱们把这些区块组织成有向无环图,也就是DAG。接下来咱们让全部的机器节点首先假设全部的交易相互之间都没有冲突,从而决定一个一致的区块顺序。而后他们再根据区块的顺序进一步决定全部交易的执行顺序,最后再依照这个交易的顺序去解决交易的冲突问题。
图片描述

接下来咱们用一个具体的例子来讲明这个想法。假设这个图上显示的是Conflux的帐本在某一时刻的状态。每一个区块都有一个指向它的父亲区块的parent边。那么这些区块和它们的parent边,就构成了一个树形结构。除了指向父亲的边之外,每个区块还能够有多个引用边。这个引用边主要是记录和表达区块之间的happens-before关系。好比,若是一个机器节点在产生区块E的时候,它已经有了区块D,并且这个时候,D也没有任何一个其余区块引用了它。那么这个节点能够给E加上一个引用D的边来表示D是在E以前产生的。

有了这些边的定义,这个帐本结构就定下来了,这个结构会在全网节点进行广播,因此,全部的节点最终都会获得一个一致的帐本。那么有了一致的帐本之后,全部的节点如何去决定一个一致的区块全序呢?咱们的核心想法是,首先,这些节点先在DAG中决定一个一致的主链,而后,再根据这个主链来决定一个一致的区块的全序。

为了决定主链,Conflux使用了Ghost规则。具体来讲就是,咱们从创世块开始,迭代的去从孩子区块中选择下一个在主链上的区块。选择的规则是挑选拥有最大子树的孩子区块。好比,区块A和区块B是创世区块的两个孩子区块。A的子树有6个区块,B的子树有5个区块。因此咱们选择区块A做为紧接着创世区块的主链区块。相应的咱们根据相同的规则,将区块C,E,H,都选进了主链。

为了产生一个新的区块,一个机器节点首先选择主链上的最后一个区块做为新区块的父亲,而后这个新区块再把全部已经收到但尚未被其余区块所引用的区块引用起来。

这里之因此使用Ghost规则而不是最长链规则来选主链,是由于Ghost规则中全部的区块,包括那些在分叉上的区块,都会对主链的选择作出贡献。这样的话,就保证了只要攻击者的算力没有超过50%, 就没法改变由诚实节点肯定的主链。

图片描述

如今咱们有了让全部机器节点对主链产生共识的机制。那接下来,这些节点如何对区块的全序达成共识呢?为了作到这一点,咱们引入一个Epoch的概念。在主链上的每个区块就肯定了一个Epoch。在分叉上的区块属于哪一个Epoch,是由第一个产生在它以后的主链区块所在的Epoch决定的。好比,区块D属于Epoch E,由于D最早被E引用,因此产生在E以前,可是D并不产生在C以前。

因此,在Conflux中,咱们首先按照Epoch的顺序来给区块排个序。而后在每个Epoch内部,咱们再按照拓扑排序来肯定区块的顺序。若是出现平局的状况,咱们再根据区块的哈希值来打破平局。因此这个图中的区块排好序之后就是这样的。接下来咱们要为交易排序,Conflux首先按照区块的顺序去给交易排序。而后在每一个区块内部,咱们就按照交易在区块里所在的位置来排就能够了。

图片描述

交易可能会冲突。好比这个例子里面的交易2和交易3。由于交易2执行过之后,帐户X里面就没有足够的余额来完成交易3了,由于在这个交易的全序里面,交易3是发生在交易2以后的,因此咱们会让交易3变为无效。另外一种状况是,相同的交易有可能被不一样的节点打包到不一样的并发区块里,好比交易4。 在这种状况下,Conflux只会接受在全序中出现的第一个这样的交易,而把后面的重复交易无效掉。

图片描述图片描述

那么接下来一个问题是Conflux如何可以防止双花攻击。咱们首先来看一下一个攻击者如何可以逆转在帐本中的一个交易,好比交易4。为了作到这一点,一个攻击者须要产生一个交易4的双花交易,打包到一个区块里面,而且将这个区块在区块的全序中插入到区块B的前面。但攻击者很难作到这一点,主要有两个缘由。第一个就是除非攻击者可以改变主链,否则他不可以逆转交易,由于交易的顺序是由主链来决定的。好比一个攻击者想把一个块插在靠前的位置,他能作就是在一个很早的Epoch里面的区块后面接着产生新块。可是只要这个块不在主链上,它就最终仍是会属于一个很晚的Epoch。由于当一个诚实的新块产生之后,它会经过引用边把这个攻击者的区块给拉到新的Epoch里面。

第二个缘由就是,若是攻击者没有超过50%的算力,他就没有办法改变主链。为何是50%呢。我这里给出一个直观的解释。假设区块A是一个主链上的块,一个攻击者想要用区块A’来取代A在主链上的位置。那么全部攻击者产生的块都会在A’的子树下面,然而全部诚实的节点所产生的块都会在A的子树下面,这样的话,攻击者就须要超过50%的算力才能让A’的子树超过A的子树。根据理论的分析,A’可以取代A的几率是随着时间的增长而指数降低的。

图片描述

所以,一个交易的确认就包含如下几步。用户首先对攻击者的算力比例以及他所能承受的风险有一个假设。给定这个假设,Conflux首先找到这个交易所属的Epoch,而后找到和这个Epoch相应的主链区块。最后再检查这个主链区块被逆转的几率是否小于用户所能承受的风险。若是小于,则该交易能够确认。

这个图归纳的展现了Conflux系统架构。 全部参加Conflux协议的机器节点由一个p2p的网络链接起来,他们经过Gossip的方式在网络中传播交易和区块。每一个机器节点,维护一个交易池,交易池里面缓存着将要打包的交易。另外每一个机器节点同时也在不停的运行Conflux的共识协议。

接下来咱们再简要的看一些实验结果。咱们搭建了Conflux的一个原型系统,而后在Amazom EC2上运行1万个Conflux节点来作实验。为了模拟公网上真实网络环境,咱们限制每一个节点的网络带宽是20Mbps。在实验中咱们调整不一样的区块大小和出块率。咱们测量了系统的吞吐率和交易延迟,而且和比特币以及Ghost的协议进行了比较。

图片描述

这个蓝色线是Conflux,能够看到区块越大、出块率越高,Conflux的吞吐率就能够线性的增长,可是比特币和Ghost就作不到。这是由于这时比特币和Ghost的区块利用率会大幅降低。

最后总结一下。Conflux利用了优化处理并发区块的想法,使得公链系统的吞吐率达到每秒上千次的交易,以及分钟级别的确认时间。在Conflux的交易里面,整个系统的吞吐率瓶颈已经不在共识机制上,而是在网络带宽或每一个节点的计算能力上。

谢谢。

本文部份内容经受权转载自“36氪”和“Odaily星球日报”


Conflux在团队成员的组成方面有着巨大的优点:团队成员均有着专业的研究背景,丰富的从业经验和编程大赛获奖经历。
Conflux是由中国惟一图灵奖得到者姚期智教授所领导的团队。姚期智院士是世界著名的计算机科学家。由于其对计算机理论研究的重要贡献,包括基于复杂性的伪随机数生成理论,密码学和通讯复杂性,在2000年得到了图灵奖。此外,包括联合创始人,首席技术官,核心系统工程开发师,算法工程师等技术团队成员,大部分都是“姚班”出来的。而且几乎全部人都有国际信息学竞赛,ACM-ICPC,Code Jam等编程大赛金牌的经历。Conflux团队在技术人员配置方面,有着无与伦比的优点。而在将来的发展中,还会不断扩充壮大这一核心优点。
图片描述

相关文章
相关标签/搜索