背景
最近在寻求提升区块链交易TPS的方案,注意到目前有采用DAG结构来实现出块并发的方案来实现提高交易TPS。这里发现Conflux项目的树图区块链采用的就是DAG结构,在这里把方案的出发点,解决之道进行相关阐述。
相关阐述
为何全序?
所谓交易全序指的是交易在所有节点上的顺序是确定的、一致的。例如A有10个币,转给B 7个币,转给C 5个币,这两个交易如果顺序不确定则得到的结果也是不确定的,这个在比特币上是不允许的。
比特币中几种安全攻击
双花问题
假设A要同时给B和C同样的交易,也就是同一个币花费两次,称为双花问题。共有三种可能实现双花:
第一种可能,让A去验证同时带有两个相同交易的一个block。假设A拥有百分之一的计算能力,那么A有可能幸运的验证出这个block。但是,这个双重花费将会马上被其他节点发现验证并且拒绝,尽管A解决了工作证明的难题,但是区块无法上链确认。
第二种可能性,A试图分别公布两个交易。A可能给一部分挖矿者公布一个交易,给另一部分挖矿者公布另一个交易,A希望让两个交易都得到验证。这种情况下,因为交易是全序的,一个交易完成后,另一个交易会被其他节点验证拒绝,网络最终只会确认其中一个交易。所以这个也不是问题。
第三种可能,A = B,也就是说A试图将一个币给C,同时A又将那个币给A自己,因为A自己可以有多个账户。这种情况下,A的策略是等到C接受了这个比特币,也就是在交易在最长的blockchain中被确认6次之后。A再试图去解决另外一个拥有A发给自己的交易的那个block分支。但是,这个时候A已经比最长的blockchain晚了6步。A很难跟得上最长的分支。其它的正常挖矿节点不会帮助A,因为它们都需要在最长的分支上工作才能得到奖赏。除非A在解决工作证明的时候能够比网络上其它节点结合起来还快(也就是说A有多于整个网络50%的计算能力)。当然,A可能会偶然幸运,在百分之一的算力的情况下能解出一个block,但是同时赶上6个块的话相当于1/100^6 。这种情况概率可以说是几乎为0。