最近arXiv上发现一篇论文(2018/8/2发表),作者来自清华大学,卡内基梅隆大学,以及多伦多大学,提出了Conflux共识机制。姚期智是作者之一。论文下载地址:https://arxiv.org/pdf/1805.03870。
本篇文章大致介绍Conflux共识机制的算法思想以及实验数据结果。感兴趣的小伙伴可以查看论文以及相关引用。
Conflux共识机制以及实验数据是在比特币(Bitcoin)源代码框架下实现。也就是说论文中区块生成的算法沿用比特币的POW(工作量证明)机制。当然论文中提到,Conflux的共识机制可以扩展到或者结合其他共识算法,比如PoS等等。Conflux共识机制的实验数据说明:Conflux共识机制的吞吐量能达到5.78GB/s,确认时间4.5-7.4分钟,交易速度6000TPS。论文中还提到,Conflux共识机制的交易速度是GHOST或者Bitcoin的11.62倍,Algorand的3.84倍。
1)Conflux框架
Conflux共识机制是在比特币源代码基础上实现的。Conflux的框架和比特币的矿机类似:GossipNetwork实现P2P网络交互,节点维护TxPool,生成区块(Block Generator),以及维护区块状态。Conflux框架如下图:
框架图中的虚线部分是一个节点上的细节。比特币的区块链是一条链,也就是说,每个区块只有一个父区块。和比特币不同,Conflux的区块链是由“DAG State”实现,每个区块除了一个“父区块”外,可能还有多个“引用区块”。
2)区块DAG
Conflux中的区块之间由多条边(Edge,连接)组成,这些边分成两类:父连接,以及引用连接。在确定主链(Pivot)的基础上,新生成的区块必须使用父连接连接到主链的最后一个区块上。除了主链外,还存在其他一些非主链的路径,新生成的区块必须使用“引用连接”连接这些非主链的最后一个区块。也就是说,Conflux中的区块之间的连接关系组成DAG(有向无环图)。Conflux中组成DAG的区块会确定一条主链(Pivot Chain)。在主链确定的基础上再确定所有区块的先后顺序。区块DAG的示意图如下:
Genesis是“创世纪”块,也就是第一个块。父连接用“实心”箭头表示,引用连接用“虚线”箭头表示。区块C使用“父连接”连接到A,使用“引用连接”连接到B。新生成的区块(New Block)使用“父连接”连接到H,使用“引用连接”连接到K。
3)主链(Pivot Chain)确定算法
要确定区块的顺序关系(Block Total Order),必须先确定主链。主链的选择使用“GHOST”规则。“GHOST”规则是在2015年的一篇论文中介绍,具体请参考论文中的引用26。“GHOST”的基本思想是选择子节点数多的节点。Conflux的DAG结构用如下的四元组表示:G = <B,g,P,E>,B代表DAG中的所有区块,g是创世纪块,P是映射函数(每个区块可以通过P函数获取父区块),E是所有区块的“父连接”和“引用连接”的集合。
GHOST规则的计算过程如下:
其中最核心,是第8行。确定下一个区块是根据子区块个数或者在子区块个数相等的情况下根据区块Hash。子区块个数多的,或者子区块个数相等区块Hash小的区块为主链的下一个区块。注意,子区块个数的计算不包括“引用连接”。
还用第2部分介绍的DAG举例:
主链由Genesis,A,C,E,H以及New Block组成。
4)区块顺序
每个主链上的区块组成一个时代(Epoch)。被该区块“连接”到的区块,且没有被之前区块“连接”的区块属于这个区块时代。区块排序的算法如下:
Past(G,a)获取DAG图G中的主链中一个区块a之前的所有区块(包括区块a),也就是区块a之前的区块以及区块a能连接到的区块。很显然,伪代码的第5行:Past(G,a)- Past(G,a')计算的是区块a所处时代中的所有区块,包括区块a。区块a时代的区块单独组成一个图的话,按照两个规则进行排序:
1)有没有连接关系 2)区块Hash大小。
同样以第2部分介绍的DAG为例,每个时代包含的区块用虚线分开。区块的排序为:Genesis,(A),(B,C),(D,F,E),(G,J,I,H),(K,New Block)。区块D只被区块E连接,所以属于区块E的时代。
5)交易顺序以及有效性
在区块确定顺序的前提下,前一个区块中的交易在后一个区块中的交易前面。同一区块的交易,按照区块中交易顺序排序。特别注意的是,因为不同节点打包的交易加入DAG图后,可能同一个交易被不同节点打入不同区块中,也就是交易冲突。交易冲突包括两种情况:1)交易两方的地址有一个相同 2)同一交易。发生冲突的交易,第一个交易有效,后续冲突交易都无效。
比如在第2部分介绍的DAG中,区块B中的Tx3和区块A中的Tx2冲突,地址X相同,保留区块A中的Tx2。区块G中Tx4和区块B中的Tx4重复,保留区块B中的Tx4。
6)安全性以及确认时间
简单的说,攻击者为了修改区块的顺序,不得已要伪造足够多的“子节点”。也就是需要有超过“诚实”节点的算力。GHOST规则的论文证明了只要作恶节点的算力不超过50%,要修改主链顺序,随着时间越长,概率越低,趋向0。论文提到,用户可以选择自己能够接受的确认时间。论文同时给出了Conflux的安全性(Safety)以及可持续性(Liveness)的证明。感兴趣的小伙伴可以自行参阅。
7)实验结果
Conflux在云服务器(Amazon EC2)上部署模拟节点,得出如下结论:
a)区块使用率,不论是区块大小变化,还是区块生成时间变化,都是100%。也就是只要生成的区块,都能利用上,增加了区块交易的吞吐量。比特币同一时间,只有一个区块胜出,其他区块都会被浪费。
b)确认时间,不论是区块变大,或者区块生成时间变长,只有稍微变长。比特币的话,在区块变大,或者区块生成时间变长,分叉的可能性就变大,确认时间显著增大。
c)Conflux具有很好的扩展性。带宽变大,区块生成的速度变快。节点变多,生成区块也会变多。两种方式都能带来吞吐量的提升。
总结:Conflux共识机制,借鉴了2015年论文中的GHOST规则,使用DAG数据结构组织区块。论文逻辑清晰,比较容易阅读。Conflux共识机制,在DAG区块中,先使用GHOST规则确定主链,再确定区块顺序,交易顺序。发生冲突的交易,只保留第一个交易,其他冲突交易作废。论文论证了Conflux共识机制,保证了区块的安全性和可靠性,又能极大地提升交易吞吐量。实验数据表明:Conflux共识机制的吞吐量能达到5.78GB/s,确认时间4.5-7.4分钟,交易速度6000TPS。
题外:Conflux共识机制的设计,结构上和以太坊中的叔块设计感觉有点相似。以太坊中的叔块也是考虑到减少分叉,将在一定时间内生成的合法区块,“引用”连接到主链的区块中。
喜欢技术的小伙伴,欢迎关注公众号:星想法。
网友评论