一、背景-雙花
成功發動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