比特幣白皮書圖解--共識機制

比特幣白皮書圖解--共識機制

比特幣白皮書圖解--共識機制

比特幣白皮書圖解--共識機制

編者按:本文由Peter 王廣忠的技術分享,轉載請註明來自Peter 王廣忠,並聯系作者獲得授權。Peter 王廣忠,程序員,專業區塊鏈講解員

比特幣白皮書圖解--時間戳服務器

防止雙花要基於兩點,第一是實現交易排序,這個是通過時間戳服務器完成的,第二是賬本的不可篡改,因為雙花攻擊還有另外一種形式,那就是攻擊者花幣買了個東西,但是拿到東西后又去把對應的交易給篡改了,比如直接刪除,或者修改數額等等。所以防止雙花還要保證賬本是不可篡改的,這是通過共識來達成的,這節的主角就是比特的共識機制。

POW 共識機制的基本規則

比特幣採用的是 POW 共識機制,咱們先聊聊它的基本規則。

首先聊聊什麼是共識?比特幣是一個人人平等的系統,如果有攻擊者出來改動了賬本,那麼沒有老大出來證明他的賬本是無效的,而必須是其他誠實的節點一起達成共識,這樣才能把錯誤的東西剔除。所以共識就是大家溝通後共同認可同一份數據。共識的方式很多,例如 POS 或者 POA,當然也包含咱們要聊的 POW 共識機制。

POW 共識機制是通過算力賽跑來爭奪創建區塊的權力。每隔十分鐘,網上就只會產生一個區塊,但是同時網絡上每個節點都是平等的,那麼這個區塊到底要有誰去生成呢?每個節點都會收集一些交易並嘗試生成區塊。但是產出一個區塊是非常難的,因為必須找到一個很難的數學問題的結果,才能出塊成功。所以這是一個運算能力的賽跑過程,跑的最快的那個節點最有可能獲得創建區塊的權力。

那是不是一個節點只要配置了比其他人都快的一臺機器,就可以每次都出塊成功呢?也不是。因為數學問題的求解是帶有隨機性的。很像一個擲骰子游戲,誰先擲出符合系統要求的的點數,誰就勝出。所以最快的機器也只是有最高的概率可以率先算出結果,但是由於節點眾多,每個節點的概率都是比較小的。

具體 POW 共識機制的數學細節,我們下一節中再展開。這裡理解了這幾點就可以繼續下面的內容了。

最長鏈原則

實際上網絡是有延遲的,所以如果有兩個節點差不多同時都出塊成功了,那麼網絡會很難判斷是哪個塊先出的,這樣該如何處理呢?這就引出了最長鏈原則。

最長鏈原則的基本原理是這樣的。如果我的節點收到一個區塊後,緊接著又收到了一個區塊。這兩個區塊又都是上一個區塊的子區塊,也就是說區塊鏈已經分叉了。由於網絡擴散也是不均勻的,所以其他節點先收到的哪個區塊是不一定的。但是這不要緊,我可以繼續在先收到的區塊之後去添加新區塊,但是也隨時監聽網絡,如果另一個分支上首先出塊了,那麼我就會直接放棄運算,直接切換到那個分支上。節點出塊的時候,要保證自己的塊是在最長的鏈上的,不然即使出塊成功,後續還是會被廢棄的。

最長鏈原則也是共識機制的關鍵組成部分。

防篡改的能力

在 POW 機制之下,想要篡改數據就變得很難了。

來看看攻擊者如何抹掉一條已有的交易。攻擊者支付給 Alice 1個幣,交易被打包到區塊中之後,攻擊者就必須在這個區塊之前的一個區塊拿出來,然後在那個區塊上繼續運算,也就是說,強行不遵守最長鏈原則,自己拼命的往自己的分支上去添加新區塊。如果最終這條分支成了最長鏈,那麼這次篡改就成功了。白皮書的第十一部分《計算》中有詳細的數學推導,因為攻擊者要對抗的是整個網絡,所以一般來講網絡上誠實的算力之和要遠遠大於攻擊者的算力,在這個條件下,攻擊者想要獨自創造出最長鏈來是非常難的。比如說,攻擊者掌握了全網算力的十分之一,那麼它第一個塊比誠實節點出的早的概率是0.1,這個看上去可能性還是有的,但是一般比特幣交易要等交易之上有六個塊之後才會認為交易成功,那麼這樣攻擊者需要連續六次都有著百分之十的好運才行,實際上能夠追上概率就是0.1的6次方,已經小到可以忽略不計了。

話說回來,壞人也沒有動力去攻擊網絡,而是會遵守網絡的規則去挖礦獲得收益。假設有一個人它掌握了全網算力的一半以上,比如 51%,那麼這樣他追上來的概率就是0.51的 n 次方了,換句話說,給定足夠的時間,它是一定能做出最長鏈,也就是可以篡改賬本成功的。但是這種情況也很難出現。首先,比特全網算力已經變得非常的大了,掌握51%的算力需要很多的錢。另外,篡改賬本也不能憑空給自己添加根本沒有的幣,而只是能把已經轉出的幣再收回,所以收益很有限。而如果用這樣的算力去繼續添加區塊,獲得出塊獎勵,卻可以獲得非常多的幣。就像白皮書《激勵》部分所說

greedy attacker ... ought to find it more profitable to play by the rules, 貪婪的攻擊者...會發現遵守規則會獲得更多利潤。

總之,賬本被篡改的可能性是非常低的。

總結

白皮書《摘要》部分有這麼一句話

The longest chain not only serves as proof of the sequence of events witnessed, but proof that it came from the largest pool of CPU power. 最長鏈不僅僅能夠體現事件發生順序的證明,而且能證明它自己是來自最大的算力池。

可見,最終被系統保留下來的區塊鏈首先能夠體現出交易發生的順序,給防止雙花提供了時間戳服務器,同時又保證了區塊鏈數據的不可篡改,這樣就解決了比特幣要解決的雙花問題。


分享到:


相關文章: