Conflux共识简要介绍
之前有关注姚班团队Conflux相关的消息,大概翻了下论文,看了下基本原理,便由于其他事情搁置下了。直到前段时间传出Conflux融资成功的消息,才发觉需要做下深入学习,下面简单介绍下Conflux共识机制的关键点。想深入研究的同学,可参见文献链接:https://arxiv.org/pdf/1805.03870.pdf。
要解决的问题
1、比特币的性能和效率问题。
2、现有对比特币的改进方式简单分为 增加区块容量 和 提高出块率,但会带来更多分叉,引发安全性和资源浪费的问题。
核心思想
1、采用DAG组织区块,并发地处理交易和区块,延迟确定事务的全局顺序。
2、主链不一定是最长链,有效防止双花,增强安全性。
3、通过DAG的组织,和交易的全局排序,将分叉的无效区块变成有效区块,提升有效区块的比例,提升系统的吞吐率,减少浪费。
总体架构
图1 Conflux共识机制的整体结构1、和比特币一样,采用Gossip实现P2P网络交互,实现交易或者区块的广播。
2、虚线部分表达了1个全节点的工作流程:node接收到1个Tx后,将Tx放入TxPool,Block generator模块将交易池中的交易进行打包。
3、打包后,将新的Block更新至本地DAG状态,将新的Block广播至全网,并根据DAG状态规定的区块顺序对该Block中的交易进行删除(删除规则后面会详细介绍)。
4、对于其他的全节点,如果接收到其他节点广播的block,会直接更新至本地DAG状态,并将该Block中包含的Tx从本地TxPool中删除,以避免重复交易打包。
区块的DAG
图2 区块DAG组织的示意图1、Conflux的区块之间靠 父链接 和 引用链接 连接在一起,上图中实线表示 父链接,虚线表示 引用链接。链接在一起的区块关系,会形成DAG。
2、Conflux中组成DAG的区块会先确定一条主链(Pivot Chian),在这个基础上再确定所有区块的先后顺序。
确定主链
1、G = <B,g,P,E>,其中,B是DAG中的所有区块,g是Genesis block,P是映射函数(每个区块可以通过该函数获取父区块),E是所有区块的“父链接”和“引用链接”的集合。
2、主链上下一个区块的选取规则为 子区块个数多的、或者在子区块个数相等时区块Hsah小的区块。(子区块的计算只包括父链接,不包括引用链接)
图3 确定Pivot Chain的步骤划分Epoch
1、主链Pivot Chain中的每一个block对应一个epoch,其他非Pivot Chain上的block也会被分配到相应的chain中。
2、分配的原则为,被主链上的区块“链接“,且没有被之前的区块”链接“的区块,即属于该区块Epoch。
确定区块顺序
按照Epoch进行定序,在同一个epoch中,不同的blocks按照parental tree的拓扑关系来排序。
图4 确定区块顺序的步骤确定交易顺序
1、在区块顺序确定的前提下,前一个区块中的交易在后一个区块中的交易前面。
2、同一区块的交易,按照区块中交易顺序进行排序。
3、当交易产生冲突时,第一个交易有效,后续冲突交易都无效。
实验结果
Conflux共识机制的吞吐量能达到5.78GB/s,确认时间4.5-7.4分钟,交易速度6000TPS。