- 區塊鏈應用開發指南:業務場景剖析與實戰
- 熊麗兵 董一凡等
- 915字
- 2022-07-28 20:17:55
1.15.2 共識算法
正如前面所說,比特幣網絡中的所有節點都會接收到一組轉賬記錄(一個區塊),然后把這個區塊更新到本地的賬本記錄中。這里就有一個問題,由于各節點處于分布式網絡中,有可能不同的節點收到不同的記錄,如果節點都隨意增加記錄,那么整個比特幣網絡中的記錄就無法保持一致。為了保持記錄的一致,那么必須確認哪個區塊被優先寫入,也就是需要以某一個節點的操作為準。但如果人為規定以某個節點為準,就意味著這個節點比其他節點更權威,相當于變成了一個中心節點,那么去中心化的優勢就蕩然無存。區塊鏈的分布式共識算法就是設計用來解決這個問題。共識算法能夠讓區塊鏈中的節點認同某一個節點的記錄,同時這個認同并不是固定某一個節點,而是區塊鏈中的所有節點都有可能獲得這個權利。
比特幣使用的共識算法叫作PoW共識機制,全稱是Proof of Word,中文翻譯為“工作量證明”。PoW機制是1997年由亞當·巴克(Adam Back)發明的,主要是為了解決垃圾郵件泛濫的問題。主要思路是郵件接收者不是任意接受別人的郵件,在一次有效的郵件發送接收過程中,發送者需要計算一個難題,然后把這個難題的答案同時發送給接收者,接受者先驗證這個答案是否有效,有效的話才接收郵件。
可以看出,PoW中最重要的就是計算一個難題。這個難題需要具有一個特點,那就是計算出這個難題的答案比較困難,而驗證這個難題卻比較簡單。因為如果驗證和計算一樣復雜的話,那發送方和接收方的成本就是一致的。從經濟上來說,成本一致也就很難實現防止惡意攻擊的目的。
關于計算困難但驗證容易的問題,我們可以舉一個現實中的例子。比如323由哪兩個數(要求每個數都大于1)相乘得到?這個問題的計算就比較復雜,必須一個數字一個數字地去試,相反,驗證這個問題很簡單,直接把對方給的兩個數字相乘,然后看結果是不是323就可以,一次乘法就出結果。(注:答案是19和17,并且答案唯一。)
比特幣就使用了這種機制,所有節點要記錄一個新的區塊,需要計算一個非常復雜的問題,先算出答案的節點就獲得了記錄新區塊的權力,其他節點都會使用這個節點的記錄。雖然理論上也有可能其他的節點在同一時間計算出答案,但在實際運行中,這個概率可以小到忽略不計,事實上比特幣運行這么多年,證明了這個機制是非常穩定安全的。