文章目录
摘要
conflux的设计思想:在不抛弃所有分叉块的前提下,用DAG图来算出区块顺序。这里有一个比较关键的地方是,不像我们知道的所有必须先确定交易顺序,再确定区块顺序的设计思路,conflux是先把区块顺序算出来,再决定要保留哪些交易
conflux性能:在亚马逊ec2上模拟了20k全节点,达到5.76GB/h的吞吐量以及在4.5-7.4的交易确认时间(由于中本聪是概率性共识,这个交易确认时间是指<0.01%被颠覆的可能花的时间),对于典型的比特币交易来说,这个处理能力相当于每秒6400笔交易。并且conflux共识的瓶颈已经不再是协议本身了,而是单个节点的处理能力。(Q:所有的共识协议不都是这样的吗?硬件越好,处理能力当然越强)
1. Introduction
中本聪共识的问题:
- 只有一个参与者赢得挖矿竞争 :就是同时挖出来的区块,只有一个是最终放到区块链里的,剩下的分叉块都会被抛弃;
- 确认时间长是必要的:就是确认时间这么长,是为了抵御攻击,比如一个块后面再连着十个区块,才认为交易可信;
已有共识协议差不多都是从以下两方面来改进的:
- 减少共识参与者的数量:例如bitcoin-NG,周期性选一个leader出来负责出块
- 选出一部分参与人作为committee,运行BFT算法:这种方法在参与人之间划分了阶层(就是权力不对等),与去中心化思想违背。比如algorand,stellar
2. Conflux架构
运行过程:
- 交易tx9广播到所有节点上(用的bitcoin core里的gossip网络,做了修改)
- 节点把新收到的交易,tx9,放到自己的交易池中
- 节点通过block generator 打包交易,生成区块(区块产生用的POW算法)
- 区块生成后,相关交易从缓冲池中删去,更新本地的DAG图
- 把区块广播给其他节点并把区块广播给其他节点
3. 共识协议
核心思想:1. 先确定区块顺序,再确定交易顺序;2. 有冲突或双花的交易,只处理第一个,剩下的抛弃
重要概念:
- Parent edge(实线):除了创始快,每个块都有且只有一个outgoing的parent edge,例如C到A,F到B
- Reference edge(虚线):每个区块有多个reference edge,代表了区块的时间产生先后顺序(happen-before关系),例如E到D
- Pivot Chain:在parent tree中,从创始块到叶子块选一个主链出来,主链的选取用了GHOST算法,GHOST算法不是计算最长链,而是计算子树尺寸最大的链,例如主链是Genesis,A,C,E,H,而不是最长链Genesis,B,F,J,I,K,因为A的子树包含的区块比B的子树更多?(A的子树包含D,G,C,E,H5个,B的子树包含F,J,I,K4个)
- Generating new block:产生新块的时候,节点先用本地DAG图算一个主链出来,新块指向主链的最后一个块,作为parent edge,同时检查其他没有指向边的块(就是除父块以外的所有叶子块),新块向这些块链接reference edge,例如新块指向H parent edge,指向K reference edge
- Epoch: 主链上每个块负责一个epoch,这个块可reach的区块就属于这个epoch,例如J可以被H reach,但不能被E reach,所以J属于H的epoch
- Block total order:对区块排序时,首先对不同的epoch进行排序,再去同一个epoch内的排序,如果同一个epoch中的块不存在偏序关系(就是happen-before关系),就根据区块的ID大小排序,例如图上的区块顺序是Genesis,A(A epoch),B,C(C epoch),D,F,E(E epoch,D的hash比F小),G,J,I,H(H epoch, G的哈希比J小),K
- Transaction total order:根据Block total order,剔除冲突交易,生成交易顺序,例如,交易顺序是TX0,TX1,TX2,TX3,TX4(B区块),TX4(G区块),但是TX3和TX2是冲突的双花交易,TX4(G区块)是TX4(B区块)重复的交易,所以最终顺序是TX0,TX1,TX2,
TX3,TX4(B区块),TX4(G区块)
安全性分析:如果攻击者想要颠覆TX4(B区块),那就必须生成一个顺序排在B区块之前的区块,因此他生成一个包含TX4的区块,并指向genesis block,但这个区块没有child,根据epoch的定义,他只能放在最后。
4. 共识算法
DAG图:
G = < B , g , P , E > G =<B,g,P,E> G=<B,g<