區塊鏈中五種常見共識演算法

程式設計師的貓發表於2021-01-14

區塊鏈是一種去中心化的分散式賬本系統,可以用於登記和發行數字化資產、產權憑證、積分等,並以點對點的方式進行轉賬、支付和交易。區塊鏈系統與傳統中心化系統相比,具有公開透明、不可篡改、防止多重支付等優點,並且不依賴於任何的可信第三方。

由於點對點網路下存在較高的網路延遲,各個節點所觀察到的事務先後順序不可能完全一致。因此,區塊鏈系統需要設計一種機制對在差不多時間內發生的事務的先後順序進行共識。這種對一個時間視窗內的事務的先後順序達成共識的演算法被稱為“共識機制”。

在區塊鏈這樣的分散式賬本系統中,保障整個系統的安全性和適應性十分重要,這也是共識演算法出現的根本原因。

那麼,區塊鏈中常見的共識演算法都有哪些呢?

1、POW:Proof of Work,工作量證明
POW是比特幣在Block的生成過程中使用的一種共識演算法,也可以說是最原始的區塊鏈共識演算法了。POW工作量證明,簡單地理解就是,通過一份證明來確認做過一定量的工作。

在比特幣系統中,得到合理的Block Hash需要經過大量嘗試計算。當某個節點提供出一個合理的Block Hash值,說明該節點確實經過了大量的嘗試計算。

這種工作量證明的形式,在我們日常生活中也十分常見。比如駕照,能拿到駕照,說明你已經進行過為期幾個月甚至幾年的練車和考試;再比如現在很火的吃雞和王者榮耀遊戲中的K/D(Kill/Death)和勝率,分值越高證明你越厲害,同時也說明你進行了大量的遊戲練習和技巧學習。

2、POS:Proof of Stake,權益證明
由於POW機制存在消耗算力巨大、交易確認時間較長,挖礦活動集中容易形成中心化等缺點,便演進出了POS權益證明。POS簡單來說,就是一個根據持有數字貨幣數量和時間來分配相應利息的制度,類似平時我們在銀行中存款。

基於權益證明共識的區塊鏈系統中,參與者的角色是驗證者Validator,只需要投資系統的數字貨幣並在特定時間內驗證自己是否為下一區塊創造者,即可完成下一區塊的建立。下一區塊創造者是以某種確定的方式來選擇,驗證者被選中為下一區塊創造者的概率與其所擁有的系統中數字貨幣的數量成正比例,即擁有300個幣的驗證者被選中的概率是擁有100個幣驗證者的3倍。

在POS模式下,有一個名詞叫幣齡,每個幣每天產生1幣齡。比如你持有100個幣,總共持有了30天,那麼,此時你的幣齡就為3000。這個時候,如果你驗證了一個POS區塊,你的幣齡就會被清空為0,同時從區塊中獲得相對應的數字貨幣利息。

這下就很有意思了,持幣有利息。並且由於POS是在一個有限的空間裡完成,不是像POW那樣在無限空間裡尋找,因此無需大量能源消耗。

3、DPOS:Delegated Proof of Stake,授權權益證明
DPOS最早出現在位元股中,又稱受託人機制,它的原理是讓每一個持有位元股的人進行投票,由此產生101位代表 。我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利完全相等。

從某種角度來看,DPOS有點像是議會制度或人民代表大會制度。如果代表不能履行他們的職責(當輪到他們時,沒能生成區塊),他們會被除名,網路會選出新的超級節點來取代他們。DPOS的出現最主要還是因為礦機的產生,大量的算力在不瞭解也不關心數字貨幣的人身上,類似演唱會的黃牛,大量囤票而絲毫不關心演唱會的內容。

DPOS通過其選擇區塊生產者和驗證節點質量的演算法確保了安全性,同時消除了交易需要等待一定數量區塊被非信任節點驗證的時間消耗。通過減少確認的要求,DPOS演算法大大提高了交易的速度。通過信任少量的誠信節點,可以去除區塊簽名過程中不必要的步驟。

4、PBFT:Practical Byzantine FaultTolerance,實用拜占庭容錯
PBFT意為實用拜占庭容錯演算法,該演算法由Miguel Castro (卡斯特羅)和Barbara Liskov(利斯科夫)在1999年提出來,解決了原始拜占庭容錯演算法效率不高的問題,將演算法複雜度由指數級降低到多項式級,使得拜占庭容錯演算法在實際系統應用中變得可行。

PBFT是一種狀態機副本複製演算法,即服務作為狀態機進行建模,狀態機在分散式系統的不同節點進行副本複製。每個狀態機的副本都儲存了服務的狀態,同時也實現了服務的操作。

將所有的副本組成的集合使用大寫字母R表示,使用0到|R|-1的整數表示每一個副本。為了描述方便,假設|R|=3f+1,這裡f是有可能失效的副本的最大個數。儘管可以存在多於3f+1個副本,但是額外的副本除了降低效能之外不能提高可靠性。

5、RAFT,一致性共識演算法
RAFT演算法包含三種角色,分別是:跟隨者(follower),候選人(candidate)和領導者(leader)。叢集中的一個節點在某一時刻只能是這三種狀態的其中一種,這三種角色可以隨著時間和條件的變化而互相轉換。

RAFT演算法主要有兩個過程:一個過程是領導者選舉,另一個過程是日誌複製,其中日誌複製過程會分記錄日誌和提交資料兩個階段。RAFT演算法支援最大的容錯故障節點是(N-1)/2,其中N為叢集中總的節點數量。

國外有一個動畫介紹RAFT演算法介紹的很透徹,有興趣的朋友可以結合動畫更好的理解下RAFT演算法,這裡不再做過多介紹。動畫連結地址:thesecretlivesofdata.com/raft/

上述是目前主要的區塊鏈共識演算法,當然還有其他演算法,比如POET:Proof of Elapsed Time流逝時間量證明,Ripple Consensus瑞波共識機制等。

每種演算法,各有千秋,在特定環境下和時間段上被採用都有各自的考慮和意義。對不同的區塊鏈應用場景而言,適合的演算法即為最好的演算法。

—-來自知乎

本作品採用《CC 協議》,轉載必須註明作者和本文連結
你還差得遠吶!

相關文章