一、背景-双花
成功发动51%算力攻击后,可以实现双花
假设小黑给大白发了 666BTC,并被打包到了第 N 个区块。
没过几分钟,小黑反悔了,通过自己控制的超过 50% 的算力,发起了 51% 算力攻击,通过剔除发给大白的 666BTC 那笔交易,重组第 N 个区块,并在重组的第 N 个区块后面继续延展区块,使之成为最长合法链。

这就是双花的过程,小黑发给大白的那 666BTC 被作废。
从上面的例子中,我们可以看到,即便大白当时收到了小黑转账过来的 666BTC,交易被打包上链,这笔交易也是有可能被作废的。
为了避免双花造成的损失,一般认为,等 6 个区块确认后的比特币交易基本上就不可篡改了。也就是说,如果小黑发给大白的 666BTC 这笔交易被打包在了第 N 个区块(第1个区块确认),大白等到第 N+5 个区块出现的时候(第6个区块确认),这笔交易基本上就不可篡改了。
二、为什么是等6个区块确认
由于算哈希是随机的,加上网络有延迟,是有同时挖出两个区块的可能。
然后不同的矿工根据他们收到的区块不同继续挖。
然后还是有可能再出现分叉,但是几率会越来越小。
一般认为一个区块在最长链上后面跟了五个区块,就不可能被分叉了。
与其说是 6 个区块,倒不如说是 1 小时(6*10 分钟),这个值的意义在于,即使算力第一名节点的算力再强,也不可能让第二名提前 1 小时挖矿,然后自己还能比第二名先挖出来。
如果支出方想要进行双重支付,他必须控制了非常大的算力,不然其他的挖矿者不会帮助它,因为他们都需要在最长的分支上工作才能得到奖赏。
假设诚实节点p找到下一个区块的概率小于0.001,
假设攻击者拥有10%的系统算力,6次确认交易的安全性高于99.9%
三、以太坊
It will be secured after n−1 successive blocks appended (n-th confirm,n=6 in Bitcoin and 12 in Ethereum).
四、PBFT
PBFT(practical Byzantine Fault Tolerance) has been shown to achieve liveness and safety properties in a partially asynchronous model, thus unlike Pow, once the block is appended it is confirmed immediately.
(https://blog.acolyer.org/2017/07/05/blockbench-a-framework-for-analyzing-private-blockchains/)
https://www.jianshu.com/p/2da3a9970387
https://www.zhihu.com/question/55581569
https://blog.csdn.net/u013288190/article/details/107590146