Categories
程式開發

解读Conflux的共识机制:如何解决公链可扩展性问题


2018年12月5日,区块链协议项目Conflux获得了包括红杉资本在内的多家知名投资机构的3500万美元(约人民币2.4亿元)的融资。Conflux作为一个可扩展的、分散的区块链系统,采用了工作量证明(PoW)与有向无环图(DAG)的机制,在去中心化的前提下,既保障了区块链的安全,又提升了区块链的可扩展性,在某些层面上,突破了“不可能三角”。

图灵奖获得者姚期智院士参与了Conflux项目,其有关区块链的论文也被更多人所关注:

Scaling Nakamoto Consensus to Thousands of Transactions per Second (扩展中本聪共识至上千交易每秒

我们今天将解读姚期智院士参与的这篇论文, 让大家进一步了解Conflux所提出的共识机制。

1、打破不可能三角

事实证明,中本聪共识对记账权和交易顺序做出了严格的规定,使得比特币在运行和发展过程中面临如下瓶颈:

  • 只有一个参与者可获得算力竞争的胜利并给主链提供有效的区块,其他同时期产生的区块会被视做分叉而遗弃,这种记账权机制导致的算力竞争,极大地浪费了网络和算力资源;
  • 最长链规则使得比特币网络工作效率低下(比特币每10分钟才出一个块,每秒仅处理7笔交易。用户需等待数小时才能来确认最长链,然后完成交易以确保自己的交易安全不被逆转)。

中本聪共识导致的生产效率低下和交易时滞过长的问题,引发了糟糕的用户体验、飙涨的转账费用和拥堵的网络,不利于区块链技术长期的推广和发展。虽然已有很多团队试图解决中本聪共识的瓶颈,但他们的方案仍存在不完美之处:

  • 通过选举代理节点,降低无效竞争产生的资源浪费,虽然可以提升区块链的效率,但会使得链变得中心化。
  • 增加区块大小或提升出块速度,只是表面上虚增了区块链的吞吐量,实际上会令同一时段产生更多的并发区块,增加区块链分叉的风险。

这种困境,被早期区块链开发人员称作为“不可能三角”,即:公链的三个属性:去中心化(Decentralization)、安全(Security)和可扩展性(Scalability),在技术实现上有二缺一,不能同时实现。

解读Conflux的共识机制:如何解决公链可扩展性问题 1

然而,Conflux团队在论文中设计了一种对比特币的扩展方案,它结合了工作量证明(PoW)与有向无环图(DAG)的优势,在去中心化的前提下,既保障了区块链的安全,又提升了区块链的可扩展性,在某些层面上,突破了“不可能三角”。

2、Conflux的实现方案

与中本聪共识在打包区块时对交易顺序进行严格规范不同,Conflux乐观地假设,在并存的区块中,交易(Tx,Transactions)是不冲突的,只要所有节点对一致的交易顺序达成共识即可。

基于这一假设,Conflux首先设立规则将区块们整合为有向无环图(DAG):每个区块都需要引用一个它的父区块的边(Parent Edges),每个区块也可以引用发生在它之前的,还没有被引用过的区块的边作为他们的引用边(Reference Edges),父边和引用边确定了各个区块之间的先后关系,实现了DAG的整体框架,增加了同一时段一起被处理的区块的数量。相较于比特币一次只能处理一个区块的低效模式而言,DAG结构大大提升了公链的速度。

解读Conflux的共识机制:如何解决公链可扩展性问题 2

然而DAG不能显示同一时段产生的不同区块之间的顺序(即区块全序),为进一步完善区块排序机制,Conflux团队引入了GHOST算法、拓扑排序,并提出了Epoch概念,将细化排列区块全序的步骤拆分成了四步:

解读Conflux的共识机制:如何解决公链可扩展性问题 3

(图中实线箭头指向父区块边,虚线箭头指向引用区块边)

  1. 确认枢轴链(Pivot Chain):Conflux改采用GHOST算法,即选择拥有最多子区块的区块作为枢轴链(Pivot Chain)上的区块,然后再采用同样的算法将它之后的区块纳入枢轴链。如上图所示,区块A和区块B都是创世区块的子区块, 虽然区块B之后的的链是最长链,但区块A拥有更多的子区块(5个),所以GHOST算法会选择区块A作为枢轴链上的区块。枢轴链即确定整个公链方向的主链,Conflux团队表示GHOST算法让枢轴链和枢轴链以外其他分叉链上的区块,都对确认枢轴链做出了贡献,这样就可以进一步保障由诚实节点确定的枢轴链的安全性,除非攻击者的算力超过了50%。
  2. 排列分叉链的区块:在确认了主链之后,为了让所有节点对区块全序产生共识,Conflux又提出了“时段”(Epoch)概念,每个枢轴链上的区块,都对应某一时段,分叉链上区块的时段,由产生在它之后的第一个引用它的枢轴链区块决定。如下图所示,区块D的时段属于Epoch E,因为区块E是最先引用D的枢轴链区块。
  3. 时段(Epoch)内排序:Epoch内的区块,都产生于同一时段,这些区块之间的顺序,由拓扑排序(Topologically Sorting)来决定,如果两个区块的排序一样,那就根据他们的哈希ID来排序。
  4. 交易(Tx)排序:此时,每个区块之间的顺序已经确定了,Conflux按照区块顺序给交易排序。区块内部的交易顺序由交易自己在区块出现的顺序来确定。

解读Conflux的共识机制:如何解决公链可扩展性问题 4

(枢轴链区块E确认分叉链区块D和区块F的时段(Epoch))

3、安全性分析和性能检验

在区块全序和交易全序确认之后,Conflux还设定了规则来应对公链容易面对的交易问题和双花问题:

  • 交易问题:冲突交易和重复打包是最常见的交易问题。如下图所示,Tx2(X转8个币给Y)和Tx3(X转8个币给Z)属于冲突交易,因为X的账户里只有10个币,所以这两笔交易只能实现一笔;而另一种问题如Tx4(Y转8个币给Z)所示,Tx4被重复打包到了区块B和区块G当中。当出现这类交易问题时,Conflux只承认在全序中位置靠前的那一笔交易,让排序靠后的冲突交易无效化;
  • 双花问题:Conflux防止双花的思路和比特币基本一致。由于Conflux中的交易顺序是由枢轴链决定的,攻击者要进行双花交易,就需要改变枢轴链上的区块顺序以逆转已经被确认过的交易。除非攻击者掌握50%以上的算力,分叉出有更多子节点的链来取代枢轴链,否则不可能实现双花。理论上讲,Conflux的运行时间越长,受到这类攻击的概率越小。

解读Conflux的共识机制:如何解决公链可扩展性问题 5

此外,Conflux团队还在Amazon EC2上搭建了原型系统,运行了10,000个带宽为20Mbps的Conflux节点,用控制变量法来测试在区块大小、出块率变化之下,Conflux、GHOST和比特币的吞吐率和交易确认时间。

结果显示,尽管区块大小和出块率发生了变化,Conflux(下图中以蓝色三角线表示)都能实现100%的高区块利用率,它有能力去处理所有的区块,鲜少遗漏掉分叉中的区块,减少了出块时的资源浪费,实现了更大的吞吐量。此外,Conflux可实现分钟级别的确认时间(即用户高度相信区块全序不会改变所需要花费的时间),然而和其他共识一样,区块越大,确认时间也会变长。

解读Conflux的共识机制:如何解决公链可扩展性问题 6

(不同区块大小或出块率对应的各共识机制的区块利用率)

Conflux团队以带宽和用户数量作为变量,对Conflux的可扩展性做出了测试。测试结果显示:Conflux可以实现5.68GB/h的吞吐量,即如果参考比特币网络在现实中的交易量,Conflux可以提升公链的每秒处理量至6400tps。Conflux团队认为:限制区块链可扩展性的瓶颈已不再是共识机制,而是网络带宽与节点算力了。

寻弊索瑕的一点,我们认为Conflux在证明区块链性能的过程中,过分乐观地假设了交易之间不冲突(即假设节点打包的都是独一无二的交易),忽略了被重复打包的交易对真实交易处理量的影响,如果Conflux希望在未来实现大规模应用的话,这是一个有待完善的方面。

Conflux在实现原理上也有一些显著的问题点。首先枢轴链的确认依赖区块数量而不是重量,而DAG上数量基本可以靠刷,两根枢轴链数量相近时看上去枢轴链会经常变动(摇摆);枢轴链的摇摆又会引发时段的摇摆,时段的摇摆会对排序造成影响,并且影响所有后续规则的前提条件。如果重量就是数量,那其实还是要靠算力去支撑安全性。其次对于交易的确认依旧是分钟级而且是基于概率的,并且带宽是个大麻烦,重复交易要么无法广播,要么将会挂满整棵树,带宽的需求是几倍甚至是几十倍。这些问题的存在都让Confulx的实现存在现实的困难。