很多剛剛接觸區塊鏈不久的小夥伴,看到“比特幣交易需要6個區塊確認”會有一些疑惑,為什麼需要6個區塊確認呢?6個區塊確認是什麼意思呢?
說這個問題之前,我們先了解下比特幣交易確認的過程:錢包建立交易——交易獨立效驗——節點確認交易——6個確認。
在整個過程中,會涉及到一個雙花問題,此問題也是比特幣交易過程中最大的風險和可能被攻擊的點。而6個確認就是為了防止雙花而得出的安全值以及比特幣交易確認最重要的一步。
按照慣例,我們舉個栗子說明一下:
位元村裡大家都採用分散式賬本進行記賬,並透過記賬、驗證交易獲得獎勵(也就是我們說的挖礦),為了方便交易喊話,於是在村頭村尾各自設立了交易廣播點。
有一天位元村的王叔叔打算在村頭廣播準備給翠花轉520元買一部蘋果手機,於是他來到村頭廣播間,大喊:
“廣播廣播,我是公鑰ID我住隔壁我姓王,要給公鑰ID村頭最美翠花,轉賬520元買蘋果手機。”
話音一落,王叔叔突然想皮一下,於是又跑到了村尾的廣播點大喊:
“廣播廣播,我是公鑰ID我住隔壁我姓王,要給公鑰ID村尾最美二丫,轉賬520元買蘋果手機。”
於是村頭村尾的廣播前後推送了這兩條交易轉賬:
“同志們,公鑰ID我住隔壁我姓王,要給公鑰ID村頭最美翠花,轉賬520元買蘋果手機,大家快記下來。”
“同志們,公鑰ID我住隔壁我姓王,要給公鑰ID村尾最美二丫,轉賬520元買蘋果手機,大家快記下來。”
但是由於村頭廣播優先接收到這筆交易,將它廣播了出去。旁邊節點也就是離得最近的鐵柱確認了這筆轉賬交易,並且將它打包成新區塊釋出出去,在這個新區塊等待驗證時。村尾的二虎才接收到轉給二丫的這筆交易廣播,於是他開始確認這筆交易,但是他不知道的是,村頭的新區塊已經得到了一個驗證,也就是2個確認。
二虎將交易確認後打包新區塊釋出出去,等待確認,但是看到這個新區塊的大牛發現村頭也有一個一樣的交易鏈,已經得到6個確認了,按照比特幣最長鏈是最正確的鏈的原則 ,大牛選擇跟在最長鏈後面繼續挖礦。
此時如果王叔叔想讓自己的第二條交易變得有效,則需要在村頭的第一筆交易未被確認前用更快的時間速度去廣播村尾的交易並且被確認,手裡控制大量的算力追趕村頭的那一筆交易,這種情況下就會出現我們所說的雙花(重複支付的賬款)。
但是在村頭的交易進行了6個確認後,已經永久記錄在鏈上的前提下。要讓村尾的交易有效 ,除非王叔叔手上有51%算力,使村尾的交易快速被7個區塊確認,趕超村頭的區塊鏈,使之成為最長鏈。但是這個可能性基本為零,為什麼呢,我們來看下。
當他以落後6個塊的起點開始來追趕之前的交易時,這個計算量將會是一個天文數字。從經濟的角度考慮,擁有如此強大算力的人做這個事是不划算的,這個過程中浪費的資源如果用來正經挖礦,得到的收益將會更高。
回到標題,為什麼需要6個確認,而不是2、3、4、5、7、呢?
其實6這個數字並不是硬性規定的,只是說有了 6 個區塊確認,被篡改的可能性非常低。在比特幣網路中,6個確認的時間充分的給了整個網路去統一區塊順序的時間。如果支出方,例如王叔叔想要進行雙重支付,他必須控制非常大的算力,不然其他的挖礦者不會幫助它,因為他們都需要在最長的分支上工作才能得到獎賞。
而且六個區塊是根據該人擁有百分之一的算力剛好確認一個區塊,但要進行6個區塊確認的概率是100的六次平方分之一,這種情況可以說是相當於零。
有些可能會說,比特幣平均每 10 分鐘打包一個區塊,6 個區塊確認平均下來需要 1個小時。那我們是不是每一筆比特幣交易,都要等上 1小時多?
哈,其實不是,這個只是針對比特幣大額交易(10000~100000 美元)才需要6個區塊交易,低於這個的則不需要這麼長時間,而且低於這個金額的交易,發生51%算力攻擊的可能性也是微乎其微。至於大於這個金額的,則需要越多的區塊確認,這樣才比較安心啊!