1. 程式人生 > >區塊鏈共識演算法知多少?(POW、POS、DPOS、PBFT區塊鏈共識演算法)

區塊鏈共識演算法知多少?(POW、POS、DPOS、PBFT區塊鏈共識演算法)

文章出處:http://www.tanjiaoyi.com/article-23783-1.html

來源: 拓樸區塊鏈 區塊鏈 共識演算法  POW、POS、DPOS、PBFT區塊鏈共識演算法
區塊鏈
區塊鏈是一種去中心化的分散式賬本系統,它可以用於登記和發行數字化資產、產權憑證、積分等,並以點對點的方式進行轉賬、支付和交易。區塊鏈系統與傳統的中心化賬本系統相比,具有完全公開、不可篡改、防止多重支付等優點,並且不依賴於任何的可信
第三方

由於點對點網路下存在較高的網路延遲,各個節點所觀察到的事務先後順序不可能完全一致。因此區塊鏈系統需要設計一種機制對在差不多時間內發生的事務的先後順序進行共識。這種對一個時間視窗內的事務的先後順序達成共識的演算法被稱為“共識機制”。
在區塊鏈這樣一個分散式資料庫中,保障整個系統的安全性和適應性是非常重要的,這也是共識演算法出現的根本原因,那麼在區塊鏈中有多少種共識演算法呢?
1 POW:Proof of Work,工作量證明

POW工作量證明是比特幣在Block的生成過程中使用的,可以說是最原始的區塊鏈共識演算法了。POW演算法不難理解,就是通過工作量的大小來統計資料,比如一塊礦石含鐵量有5%,那麼你要得到數量為5的鐵時,就需要100個這樣的礦石。你的鐵越多就說明你用於提煉鐵礦石越多。你的鐵越多,這個證明就越可靠。
據一個簡單的例子,選舉投票畫“正”字方法,“正”字越多就說明你在選民中的選票越高,你更容易選中或排名靠前。比如有三個“正”以上的的可以晉級,那麼超過三個“正”字的全部都可以晉級。
再比如有個在美國待了10年的中國人,回來之後幾乎不用對他英語進行考察,因為他在美國待了10年,我們相信他英文是肯定沒有
問題
的。也就是說他在美國的這10年大多數是用英文交流的,他已經投入了足夠的工作量。這個工作量與他的英文熟練程度是成正相關的。
考英語六級為什麼要做很多題目的原理也是這樣,是一種工作量的證明,只有多做題,工作量才會提升,通過六級的概率才會大,反過來看,如果他有英語過了8級,那麼我們相信他有英語8級的實力。
當然,POW演算法也應用於我們生活中的其他場合,比如格鬥類遊戲和FPS類遊戲的K/D比和勝率,越高就說明你越強。

2 POS:Proof of Stake,股權證明
PPC是從中本聰所創造的BTC衍生出來的一種P2P的電子密碼貨幣,以股權證明(Proof of Stake,以下簡稱POS)取代工作量證明(Proof of Work,以下簡稱POW)來維護網路安全。POS實際上可以取代POW的大部分功能。這主要是因為,和工作量證明POW一樣,POS權益證明也不可能被輕易偽造。當然,這也是貨幣系統中的一個關鍵特性-防止偽造。從哲學角度而言,貨幣在過去就是一種“工作量證明”,因此其本身可以代替工作量的證明。
在這裡我們需要引入一個概念:幣齡。
至少早在 2010年,中本聰就在BTC設計中提出並使用了幣齡這一概念,用於給交易排出優先次序,但這個概念在其安全模式中沒有起來很重要的作用。幣齡只是簡單地定義為貨幣的持有時間段。簡單舉例說明一下:如果A從B那裡收到了10個幣,並且持有30天,那麼A就收集到了300幣天的幣齡。
如果A使用了從B收到的這10個幣,我們就認為A從這10個幣上積累的幣齡被消耗(銷燬)了。
為簡化幣齡的計算,我們為每個交易引入了時間戳的概念。區塊時間戳及交易時間戳相關聯的協議得以強化,以便確定對幣齡的運算。
這有點像我們現在放在銀行法幣裡面的利息,在交易中,區塊持有人可以消耗他的幣齡獲得利息,同時獲得為網路產生一個區塊和用POS造幣的優先權。
由此POS區塊的產生具有隨機性,這一過程與POW相似。但有一個重要的區別在於,(POS)隨機雜湊運算是在一個有限制的空間裡完成的(具體來說為1 hash/未消費錢包的輸出*秒),而不是象POW那樣在無限制的空間裡尋找,因此無需大量的能源消耗。
3 DPoS–Delegated Proof of Stake授權權益證明
又稱受託人機制,它的原理是讓每一個持有位元股的人進行投票,由此產生101位代表 , 我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利是完全相等的。
由於使用了去中心化的投票機制,DPoS相比其他的系統更加民主化。DPoS並沒有完全去除對於信任的要求,代表整個網路對區塊進行簽名的被信任主體在保護機制下確保行為正確而沒有偏見。另外,每個被簽名的區塊都有先前區塊被可信任節點簽名的證明。DPoS消除了交易需要等待一定數量區塊被非信任節點驗證的時間消耗。通過減少確認的要求,DPoS演算法大大提高了交易的速度。通過信任少量的誠信節點,可以去除區塊簽名過程中不必要的步驟。
DPOS引人注目的安全性來自於其選擇塊生產者和驗證節點質量的演算法。運用贊成投票的過程可以確保一個人即使擁有50%的有效投票權也不能獨自挑選哪怕一個生產者。DPOS旨在優化擁有強壯網路連線的誠實節點100%參與(共識過程)的名義條件。這使得DPOS有能力在平均只有1.5秒的時間內以99.9%的確定性確認交易,同時以優雅和可檢測的方式降級 – 從降級中恢復正常也不過是小事一樁。
4 PBFT–Practical Byzantine FaultTolerance實用拜占庭容錯
PBFT是Practical Byzantine Fault Tolerance的縮寫,意為實用拜占庭容錯演算法。該演算法是Miguel Castro (卡斯特羅)和Barbara Liskov(利斯科夫)在1999年提出來的,解決了原始拜占庭容錯演算法效率不高的問題,將演算法複雜度由指數級降低到多項式級,使得拜占庭容錯演算法在實際系統應用中變得可行。
PBFT能夠保證活性和安全性(liveness & safety)的前提下提供了(n-1)/3的容錯性。在分散式計算上,不同的計算機透過訊息交換,嘗試達成共識。拜占庭將軍問題就根據錯誤計算機的數量,尋找可能的解決辦法,這無法找到一個絕對的答案,但只可以用來驗證一個機制的有效程度。
而拜占庭問題的可能解決方法為:
在 N ≥ 3F + 1 的情況下一致性是可能解決。其中,N為計算機總數,F為有問題計算機總數。資訊在計算機間互相交換後,各計算機列出所有得到的資訊,以大多數的結果作為解決辦法。
小蟻採用的dBFT機制,是由權益來選出記賬人,然後記賬人之間通過拜占庭容錯演算法來達成共識。
此演算法由小蟻獨創,在PBFT基礎上進行了以下改進:
將C/S架構的請求響應模式,改進為適合P2P網路的對等節點模式;
將靜態的共識參與節點改進為可動態進入、退出的動態共識參與節點;
為共識參與節點的產生設計了一套基於持有權益比例的投票機制,通過投票決定共識參與節點(記賬節點);
在區塊鏈中引入數字證書,解決了投票中對記賬節點真實身份的 認證問題。
上述是目前主要的區塊鏈共識演算法,當然還有其他的演算法,比如PoET–Proof of Elapsed Time流逝時間量證明等。這幾種演算法大多是按該共識演算法從誕生到熱門的順序來定的,無論是技術上,還是業務上,每種演算法都在特定的時間段中有各自的考慮和意義。優缺點當然各有千秋。共識演算法的選擇主要與應用場景高度相關。網上也有很多這樣的帖子,日後有時間我也會大家一同分享。 區塊鏈 共識演算法  POW、POS、DPOS、PBFT區塊鏈共識演算法
區塊鏈
區塊鏈是一種去中心化的分散式賬本系統,它可以用於登記和發行數字化資產、產權憑證、積分等,並以點對點的方式進行轉賬、支付和交易。區塊鏈系統與傳統的中心化賬本系統相比,具有完全公開、不可篡改、防止多重支付等優點,並且不依賴於任何的可信 第三方
由於點對點網路下存在較高的網路延遲,各個節點所觀察到的事務先後順序不可能完全一致。因此區塊鏈系統需要設計一種機制對在差不多時間內發生的事務的先後順序進行共識。這種對一個時間視窗內的事務的先後順序達成共識的演算法被稱為“共識機制”。
在區塊鏈這樣一個分散式資料庫中,保障整個系統的安全性和適應性是非常重要的,這也是共識演算法出現的根本原因,那麼在區塊鏈中有多少種共識演算法呢?
1 POW:Proof of Work,工作量證明
POW工作量證明是比特幣在Block的生成過程中使用的,可以說是最原始的區塊鏈共識演算法了。POW演算法不難理解,就是通過工作量的大小來統計資料,比如一塊礦石含鐵量有5%,那麼你要得到數量為5的鐵時,就需要100個這樣的礦石。你的鐵越多就說明你用於提煉鐵礦石越多。你的鐵越多,這個證明就越可靠。
據一個簡單的例子,選舉投票畫“正”字方法,“正”字越多就說明你在選民中的選票越高,你更容易選中或排名靠前。比如有三個“正”以上的的可以晉級,那麼超過三個“正”字的全部都可以晉級。
再比如有個在美國待了10年的中國人,回來之後幾乎不用對他英語進行考察,因為他在美國待了10年,我們相信他英文是肯定沒有 問題的。也就是說他在美國的這10年大多數是用英文交流的,他已經投入了足夠的工作量。這個工作量與他的英文熟練程度是成正相關的。
考英語六級為什麼要做很多題目的原理也是這樣,是一種工作量的證明,只有多做題,工作量才會提升,通過六級的概率才會大,反過來看,如果他有英語過了8級,那麼我們相信他有英語8級的實力。
當然,POW演算法也應用於我們生活中的其他場合,比如格鬥類遊戲和FPS類遊戲的K/D比和勝率,越高就說明你越強。

2 POS:Proof of Stake,股權證明
PPC是從中本聰所創造的BTC衍生出來的一種P2P的電子密碼貨幣,以股權證明(Proof of Stake,以下簡稱POS)取代工作量證明(Proof of Work,以下簡稱POW)來維護網路安全。POS實際上可以取代POW的大部分功能。這主要是因為,和工作量證明POW一樣,POS權益證明也不可能被輕易偽造。當然,這也是貨幣系統中的一個關鍵特性-防止偽造。從哲學角度而言,貨幣在過去就是一種“工作量證明”,因此其本身可以代替工作量的證明。
在這裡我們需要引入一個概念:幣齡。
至少早在 2010年,中本聰就在BTC設計中提出並使用了幣齡這一概念,用於給交易排出優先次序,但這個概念在其安全模式中沒有起來很重要的作用。幣齡只是簡單地定義為貨幣的持有時間段。簡單舉例說明一下:如果A從B那裡收到了10個幣,並且持有30天,那麼A就收集到了300幣天的幣齡。
如果A使用了從B收到的這10個幣,我們就認為A從這10個幣上積累的幣齡被消耗(銷燬)了。
為簡化幣齡的計算,我們為每個交易引入了時間戳的概念。區塊時間戳及交易時間戳相關聯的協議得以強化,以便確定對幣齡的運算。
這有點像我們現在放在銀行法幣裡面的利息,在交易中,區塊持有人可以消耗他的幣齡獲得利息,同時獲得為網路產生一個區塊和用POS造幣的優先權。
由此POS區塊的產生具有隨機性,這一過程與POW相似。但有一個重要的區別在於,(POS)隨機雜湊運算是在一個有限制的空間裡完成的(具體來說為1 hash/未消費錢包的輸出*秒),而不是象POW那樣在無限制的空間裡尋找,因此無需大量的能源消耗。
3 DPoS–Delegated Proof of Stake授權權益證明
又稱受託人機制,它的原理是讓每一個持有位元股的人進行投票,由此產生101位代表 , 我們可以將其理解為101個超級節點或者礦池,而這101個超級節點彼此的權利是完全相等的。
由於使用了去中心化的投票機制,DPoS相比其他的系統更加民主化。DPoS並沒有完全去除對於信任的要求,代表整個網路對區塊進行簽名的被信任主體在保護機制下確保行為正確而沒有偏見。另外,每個被簽名的區塊都有先前區塊被可信任節點簽名的證明。DPoS消除了交易需要等待一定數量區塊被非信任節點驗證的時間消耗。通過減少確認的要求,DPoS演算法大大提高了交易的速度。通過信任少量的誠信節點,可以去除區塊簽名過程中不必要的步驟。
DPOS引人注目的安全性來自於其選擇塊生產者和驗證節點質量的演算法。運用贊成投票的過程可以確保一個人即使擁有50%的有效投票權也不能獨自挑選哪怕一個生產者。DPOS旨在優化擁有強壯網路連線的誠實節點100%參與(共識過程)的名義條件。這使得DPOS有能力在平均只有1.5秒的時間內以99.9%的確定性確認交易,同時以優雅和可檢測的方式降級 – 從降級中恢復正常也不過是小事一樁。
4 PBFT–Practical Byzantine FaultTolerance實用拜占庭容錯
PBFT是Practical Byzantine Fault Tolerance的縮寫,意為實用拜占庭容錯演算法。該演算法是Miguel Castro (卡斯特羅)和Barbara Liskov(利斯科夫)在1999年提出來的,解決了原始拜占庭容錯演算法效率不高的問題,將演算法複雜度由指數級降低到多項式級,使得拜占庭容錯演算法在實際系統應用中變得可行。
PBFT能夠保證活性和安全性(liveness & safety)的前提下提供了(n-1)/3的容錯性。在分散式計算上,不同的計算機透過訊息交換,嘗試達成共識。拜占庭將軍問題就根據錯誤計算機的數量,尋找可能的解決辦法,這無法找到一個絕對的答案,但只可以用來驗證一個機制的有效程度。
而拜占庭問題的可能解決方法為:
在 N ≥ 3F + 1 的情況下一致性是可能解決。其中,N為計算機總數,F為有問題計算機總數。資訊在計算機間互相交換後,各計算機列出所有得到的資訊,以大多數的結果作為解決辦法。
小蟻採用的dBFT機制,是由權益來選出記賬人,然後記賬人之間通過拜占庭容錯演算法來達成共識。
此演算法由小蟻獨創,在PBFT基礎上進行了以下改進:
將C/S架構的請求響應模式,改進為適合P2P網路的對等節點模式;
將靜態的共識參與節點改進為可動態進入、退出的動態共識參與節點;
為共識參與節點的產生設計了一套基於持有權益比例的投票機制,通過投票決定共識參與節點(記賬節點);
在區塊鏈中引入數字證書,解決了投票中對記賬節點真實身份的 認證問題。
上述是目前主要的區塊鏈共識演算法,當然還有其他的演算法,比如PoET–Proof of Elapsed Time流逝時間量證明等。這幾種演算法大多是按該共識演算法從誕生到熱門的順序來定的,無論是技術上,還是業務上,每種演算法都在特定的時間段中有各自的考慮和意義。優缺點當然各有千秋。共識演算法的選擇主要與應用場景高度相關。網上也有很多這樣的帖子,日後有時間我也會大家一同分享。