作為比特幣的底層技術,區塊鏈解決的一個核心問題是雙花問題,即它需要讓分佈式節點達成一個統一的認可,這需要一定的方式確定哪些節點是合法的存在,哪些是不合法的存在,由此也就需要共識機制的加入。
。
。
。
可以這樣理解,共識機制的重要性在於其構造了一種無信任的合作方式,即便是系統內參與者誰都不存在信任,但仍舊可以基於統一的共識協作完成任務。
。
。
。
以比特幣為例來理解,中本聰在比特幣的白皮書寫到運行比特幣網絡的步驟:。
。
。
。
1、 新的交易向全網進行廣播;。
。
。
。
2、 每一個節點都將收到的交易信息納入一個區塊中;。
。
。
。
3、 每個節點都嘗試在自己的區塊中找到一個具有足夠難度的工作量證明;。
。
。
。
4、 當一個節點找到了一個工作量證明,它就向全網進行廣播;。
。
。
。
5、 當且僅當包含在該區塊中的所有交易都是有效的且之前未存在過的,其他節點才認同該區塊的有效性;。
。
。
。
6、 其他節點表示他們接受該區塊,而接受的方法則是跟隨在該區塊的末尾,製造新的區塊以延長該鏈條,並將該區塊的隨機散列視為新區快的隨機散列值。
。
。
。
也就是說,當交易發生的一刻,比特幣的交易數據就被蓋上了時間戳,而當這筆交易數據被打包到一個區塊中後,就算完成了一次確認,連續6次確認之後,交易不可逆轉。
在比特幣中,每一次確認都需要解決一個複雜的難題,因此每一次確認都需要時間。
所以當A試圖將一筆資金進行兩次支付交易時候,由於確認時間較長,不可能同時得到確認,由此抑制雙花問題的存在。
。
。
。
共識機制的加入,抑制“雙花問題”,更長遠而言,讓區塊鏈的工作得以有效的進行,解決運行中會出現的攻擊、作弊、延時、一致性、最終確定性等等問題。
。
。
。
但有個問題是,中本聰提出的PoW機制,即比特幣在區塊生成的過程中使用了PoW機制。
通過一種易於校驗的計算,看網絡中哪一個節點率先找到隨機數,通過校驗,就可以產生區塊,廣播獲得節點認可之後就形成了區塊鏈。
如果A要發動雙花攻擊,進行交易1後並發送廣播,網上其他節點都記錄了這筆交易,但要生成6個區塊後才能真正確定這筆交易已經成功。
在交易1廣播後,A卻在自己的區塊鏈記錄了交易2,重複利用交易1的幣。
如果A掌握超過51%的算力,那麼A可以很大機率的挖出之後的6個區塊之後,然後再次廣播,此時交易2會被判定為成功,而交易1則失敗。
也就是一筆錢花2次,但是交易1的收錢者最終並沒有收到錢,蒙受損失,這就是所謂的雙花攻擊。
當然,如果算力不夠51%,也可以發動雙花攻擊,也有成功的可能。
只是算力越低,發動雙花攻擊成功的機率會越越小。
這也是PoW算力集中的問題之一。
。
。
。
區別於PoW,PoS共識機制要求節點提供擁有一定數量的代幣證明來獲取競爭區塊鏈記賬權的一種分佈式共識機制,但同樣也有不完善的地方。
總體而言,目前主流的共識算法包括PoW、PoS、BFT等,混合共識更如雨後春筍般出現,有一些在主流基礎上演變而來的共識算法,諸如PoA、PoI、DPoS、PBFT等。
。
。
。
而哪些共識機制能真正擔起區塊鏈大規模應用落地的使命,或許時間會給到答案。
。