區塊鏈主流共識算法
Proof Of Work,也就是工作量證明。工作量證明系統(或者說協議、函數),是一種應對拒絕服務***和其他服務濫用的經濟對策。它要求發起者進行一定量的運算,也就意味著需要消耗計算機一定的時間。這種系統要求得到證明的過程是低效且漫長的,可是校驗則是高效且迅速,概括起來就是求解難,驗證容易。
比特幣是第一個區塊鏈應用,同時也是最著名的應用之一,它所使用的共識機制就是POW。那麽具體是怎麽實現的呢?
在比特幣中,使用了SHA256這種哈希函數作為求解手段。SHA256有以下特征:
- 是一種散列函數,即相鄰的x1和x2,求得的f(x1)和f(x2)差別極大。
- 不可逆推,給定了f(x)的值,推斷不出輸入值。
- 不存在比窮舉更好的方法,可以使f(x)落在特定的範圍。
實際使用過程中,每個節點需要打包的交易數據相同,再從尾部加一個隨機數(節點自己選)作為整體輸入來求輸出值,把結果和當前的挖礦難度對比(要求輸出值前x位為0),滿足條件則向附近節點廣播;不滿足則更換隨機數繼續求解。最快求得解的節點,則可以視為挖礦勝出,取得其他節點的共識。
目前比特幣已經吸引了全球大部分的運算能力,其他再使用PoW共識機制的區塊鏈應用很難獲得相同的計算能力來保障自身的安全,從而無法復制比特幣的輝煌;同時由於挖礦造成大量的資源被浪費,共識達成的周期很長,導致了比特幣的TPS(transaction per second,每秒執行事務數量)極低,只有個位數。
二.POS(Proof of Stake)
POS通過區塊鏈系統內部的虛擬資產來管理安全性,根據節點持有的通證數量或者時長來決定節點享有的權利大小。區塊鏈系統的參與者鎖定他們在該區塊鏈上持有的虛擬資產(Coin或Token),他們會簽署消息以達成一致意見。只有那些已經成為系統一部分的參與者才能夠決定下一個區塊的內容。
PoW共識算法從經濟角度,可以自然做到防止區塊鏈分叉(區塊鏈分叉的本質就是網絡各節點對區塊鏈的生成產生分歧,無法達成共識)。但是PoS則需要精心設計好相應的規則來防止分叉,例如PoS可以設定懲罰機制,參與挖礦的礦工被要求鎖定一定數量的虛擬資產。如果他們被偵測到了存在不當的行為,則系統會沒收全部或部分被鎖定的虛擬資產。
三.DPOS(Delegated Proof of Stake)
DPoS機制,中文名叫做股份授權證明機制(又稱受托人機制),它的原理是讓每一個通證的節點進行投票,選出集中多數票的節點,例如100個,然後這些節點會行使類似POS的權力。
DPOS利用利益相關方批準投票的權力以公平和民主的方式解決共識問題,所有網絡參數,從費用估算到塊間隔和交易規模,都可以通過選定的代表進行調整。從某種角度來看,DPOS有點像是議會制度或人民代表大會制度。如果代表不能履行他們的職責(當輪到他們時,沒能生成區塊),他們會被除名,網絡會選出新的超級節點來取代他們。
四.PBFT(Practical Byzantine Fault Tolerance)
Practical Byzantine Fault Tolerance,實用拜占庭容錯算法。
拜占庭假設是對現實世界的模型化,由於硬件錯誤、網絡擁塞或斷開以及遭到惡意***,計算機和網絡可能出現不可預料的行為。拜占庭容錯協議必須處理這些失效,並且這些協議還要滿足所要解決的問題要求的規範。這些算法通常以其彈性t作為特征,t表示算法可以應付的錯誤進程數。很多經典算法問題只有在t小於n/3時才有解,如拜占庭將軍問題,其中n是系統中進程的總數。
五.BFT-DPoS
BFT-DPoS,Byzantine Fault Tolerance - Deligated Proof of Stake,帶有拜占庭容錯的委托股權證明。
EOS的白皮書中,每個見證人出塊時全網廣播,其他見證人收到新區塊後,立即對此區塊進行驗證,並將驗證簽名完成的區塊立即返回出塊見證人,不需等待其他見證人自己出塊時再確認。從當前的出塊見證人看來,他生產了一個區塊,並全網廣播,然後陸續收到了其他見證人對此區塊的確認,在收到 2/3 見證人確認的瞬間,區塊(包括其中的交易)就不可逆了。交易確認時間大大縮短,從 45 秒縮短至 3 秒左右(主要為等待生產區塊的時間)。
EOS原來是采用DPoS,為了效率采用PBFT 和 DPOS結合的BFT-DPoS,理論確認速度大大提升。因為EOS在設計之初就提出了選出21個超級節點作為見證人,並負責全網的出塊,所以被人詬病缺失了區塊鏈的去中心化精神。實際上,比特幣、以太坊這些前輩,經過了前期的發展後,大部分算力已經集中在各大礦池和機構手上了,所以EOS只是提前把這個生態確定下來,並寫在臺面上,才會有這樣的非議。
EOS的這種妥協,其實是兼顧了中心化和效率,是區塊鏈上一個有益的嘗試。
區塊鏈主流共識算法