區塊鏈共識機制的深入剖析

買賣虛擬貨幣
解決了在不可信通道上傳輸可信資訊、價值轉移的問題,而共識機制解決了區塊鏈如何在分散式場景下達成一致性的問題,也是保障區塊鏈系統不斷執行下去的關鍵。本期嘉賓崔偉將用一個簡單的例子,深入剖析“共識機制”。主要內容:1. 區塊鏈為什麼需要共識機制;2. 共識機制的工作原理和重要性;3. 共識機制的基本要求和不可能三角;

4. 共識機制的種類;


主講嘉賓

一、區塊鏈為什麼需要共識機制

由於加密貨幣多數採用去中心化的區塊鏈設計,節點是各處分散且平行的,所以必須設計一套制度,來維護系統的運作順序與公平性。

1.什麼是共識機制

統一區塊鏈的版本,並獎勵提供資源、維護區塊鏈的使用者,以及懲罰惡意的危害者。這樣的制度,必須依賴某種方式來證明,是由誰取得了一個區塊鏈的打包權(或稱記帳權),並且可以獲取打包這一個區塊的獎勵,又或者是誰意圖進行危害,就會獲得一定的懲罰,這就是共識機制。

簡單來說,我們要一種機制來選擇哪個礦工來把交易寫入區塊鏈。比如今天聽課的同學有100人,我們分成50組打乒乓球,那麼我們有50組比分要記錄。

2.分散式記賬及“挖礦”

傳統的中心式記賬,意味著我們需要一個組委會來記錄比分。這樣就可能會出現徇私舞弊的情況,所以需要我們採用去中心化的方法。這意味著,這50桌每組都要記錄比分。不光自己的,還要記錄別人的。這就是分散式或者說去中心化的記賬方法。

但是,這樣做效率太低。大家必須要花大量的時間做這件事情。所以區塊鏈的設計是,我們找一些礦工來記錄比分。對於這些礦工,我們會給予獎勵,從而鼓勵他們為大家記錄比分,記錄完了以後再給每一桌複製一份。

這個獎勵,在比特幣系統裡面就是比特幣的由來。交易本身並不產生新的貨幣,礦工記錄比分才生成貨幣,也就是說,代幣的目的是為了獎勵付出努力的人,這就是”挖礦“的原理。

既然有獎勵,那麼現在問題來了。譬如比特幣,每次記賬(10分鐘)可以產生12.5個比特幣(現在,過去是50個),按照今天的價格,就是50萬人民幣。那麼肯定有很多礦工都搶著給大家計分,來獲取這個報酬。

那麼應該怎麼選擇一個礦工出來?這就需要用到“共識機制",也就是說,大家都根據某種規則,同意讓我們今天的某一位同學來記錄大家的比分,記錄完畢的獎勵都給他。

當然,例子比較簡單,不過本質上就是這回事。這個乒乓球比賽,就可以理解為一筆交易。比分,就是記賬。記錄比分的人,就是礦工。獎勵的錢,就是比特幣或者代幣。

二、共識機制的工作原理和重要性

首先,交易發起方構造交易,加上數字簽名,廣播到區塊鏈P2P網路之中。然後, 區塊鏈網路中的“礦工"節點陸續收到這筆交易。然後,所有礦工都會把交易打包到自己構建的備選區塊之中,然後將自己的備選區塊廣播。

這時候,全網根據”共識機制“來決定哪個礦工負責寫入這個區塊。然後這個礦工將會負責把這個區塊新增到區塊鏈上,完成該區塊中的所有交易。最後交易完成,交易參與方可以查詢到交易執行結果。

那麼, "共識機制"是從什麼時候出現的?

1982年, Lamport首次發表了關於拜占庭將軍問題解決方案的論文,後來獲得了計算機界的最高獎:圖靈獎。
1999年,Jakobsson發表了關於PoW的論文。
2008年11月,中本聰發表了比特幣的論文,並用了PoW作為共識機制。
2012年,PeerCoin專案開始採用PoS作為共識機制。
2016年,Tendermint專案開始採用PBFT作為公示機制。
2018年,以太坊專案提出在2.0版本中,透過Casper方法採用PoS作為共識機制。實際上,V神今天正在歐洲介紹這方面的最新進展。

三、共識機制的基本要求和不可能三角

這裡需要提的是,任何分散式系統(包括比特幣甚至貨幣),都存在一個不可能三角形:效能、可擴充套件性和去中心化。

譬如人民幣,效能和可擴充套件性很高(每天無數人用它來交易),但是去中心化低(央行想印多少就印多少)。對於比特幣,去中心化程度高,可擴充套件性也高,但是效能低。

所以在設計、選擇共識機制時候,我們必須記住這三點:我們應該最佳化哪一方面,犧牲哪一方面,因為你不可能同時達到這三點。另外,所有的共識演算法必須具備三個基本要求:

1.一致性 (safety):所有參與共識的誠實的節點,得到的計算結果是相同的,而且是符合共識協議的。
2. 終局性 (liveness):所有參與共識的誠實的節點,最終可以達成一致性結果。
3. 容錯性 (fault tolerance):在共識演算法的成功執行過程中,可以容許參與共識的節點發生一些錯誤。

四、共識機制的種類

1.POW(工作量證明)

如上所述,為了鼓勵人們主動記賬,中本聰決定給記賬的人發獎勵,這就是“比特幣”的由來。而記賬的人就是“礦工”。

由於不同的“礦工”都希望獲得記賬權,為了給每個區塊選擇一個全網認可的“礦工”,就需要 “礦工”給出一個證明,就是所謂“工作量證明”, 選出的礦工可以獲得12.5個比特幣作為獎勵。

獎勵以每四年減一半的速度遞減,礦工的收益的另一部分來自於每筆交易產生的手續費,到2140年無幣可獎勵的時候,礦工的獎勵將全部來自於交易的手續費。

現在關鍵來了,工作量證明是什麼意思?

還是以乒乓球比賽為例。如果有一個人來計分,我們會希望他們不能太慢,但是也不能太快。太慢的話,會積累很多比分要記錄,最後大家都要等他們。太快的話,會干擾我們的正常比賽。大家比賽中間要停下來,跟他們談話,這個效率很低。

為了保證節點之間的同步,新區塊的新增速度不能太快。區塊鏈的發明者中本聰故意讓新增新區塊變得很困難。只有透過極其大量的計算,才能找到一個隨機值,使得區塊的雜湊值符合一定的條件。這個過程就叫做挖礦(Mining)。

“礦工” 的工作其實就是猜出這個隨機項的值,使得區塊的雜湊值可以小於目標值,從而能夠寫入區塊鏈。這個隨機項的值,必須透過窮舉計算來獲得,也就是說,所有的礦工(計算機)必須反覆不停地嘗試從0開始的所有整數,直到他們找到這個隨機值(nounce)。找到了,他們就發財了。

舉個簡單的比喻,“挖礦” 的過程其實類似於打麻將, 四方最後有一方湊出了胡牌的牌型,就當與生成了一個達到要求的區塊雜湊值,胡牌的人就成了 “礦工”,得到相應的獎賞(比特幣)。胡完一牌,就是一個區塊生成,所以當前交易記錄在內。

然後大家接著下一局,繼續湊胡牌牌型。如果一局沒有人胡牌,也就是大家花了時間,但是沒有生成區塊,就重新開局。如果投入的時間/資源,小於獲得的獎賞,這個礦工就虧了。但是,如果有人摸了兩把就胡牌了,相當於很快就找到了這個雜湊值, 這個礦工就大賺了。

這樣,全世界成千上萬臺“礦機”們,都在不眠不休地計算中本聰出的這道數學題,為獲得獎勵的比特幣而“廢寢忘食”,這就是工作量證明的原理。

具體來說,工作量證明(PoW) 或者說挖礦演算法,目的就是尋找一個特殊的數字(nounce),使得雜湊值(即SHA256 函式)的輸出字串的前n位是零。

所以,透過POW,我們可以找到一個礦工。但是網路上有那麼多的節點,怎麼確保所有節點都使用同一個區塊鏈呢?

中本聰為此提出了著名的一致性判別方法:如果一個節點的區塊鏈與另外一個節點的不同,這就意味著衝突。解決這個問題的辦法就是,“最長的有效的鏈”應當獲得認可。換句話說,網路上最長的鏈就是事實上的標準鏈。

利用這種演算法,我們可以在我們網路中的所有節點中達成共識。PoW的本質,是選擇計算量最大的鏈條最為主鏈條。這樣,即使有人惡意破壞,也要付出大量的經濟成本,達到不可承受的程度。

舉個例子,如果你去一個醫院櫃檯排隊,有好幾條隊,你應該選擇哪一條?按照中本聰的規則,你應該派最長的那條隊,因為裡面的人排得最久,所以最不容易被保安驅散。

也就是說,這套機制會找出最長的一條隊伍是合法的,獎勵其中排得久的人,並讓不合法的分叉隊伍重新排隊。只要大部分人不傻,就會自覺在最長的隊伍上排隊。

PoW的優點

1. 架構清晰,有效可靠。
2. 要獲得多數節點的認可,攻擊者必須投入超過51%的計算量,才能保證篡改結果。
3.公平:這種機制類似於多勞多得,乾的多,收穫也多。

PoW的缺點


1. 資料冗餘:所有資料都要在所有節點備份一遍。
2. 消耗能源:現在挖礦佔到了全球0.13%的電力消耗。挖掘一枚比特幣,相當於一輛汽車駕駛20萬公里的碳排放量。
3. 資訊網路延遲:區塊鏈,每10分鐘才能生成一個區塊,完成其中的交易,以太坊略有提高,每秒交易在幾百筆以內,相比之下,阿里巴巴雙11的交易速度是31.5萬筆/秒。
4. 算力壟斷:有些擁有大量算力的公司,譬如位元大陸,實際上已經擁有了某些公鏈或者dApp超過51%的算力,可以篡改結果,這樣就與加密貨幣或者中本聰的去中心化背道而馳。

2.POS(權益證明)

PoS即權益證明,最早由Sunny King於2012年創立的PPC(點點幣)採用,它可以解決上面提到的浪費算力的問題。

簡單來說,它選舉礦工的規則是:誰有錢誰更有可能獲得挖礦權。也就是說,挖礦成功的概率與礦工持有的代幣數量成正比。

回到乒乓球比賽的例子,也就是誰比分最高,讓誰來記,這樣鼓勵積極比賽的人。

這樣的好處:
1. 不需要算題,所以節約能源。
2. 攻擊者需要更高的成本,因為他需要購買大量的代幣才能獲得51%的篡改權。

缺點是:
1. 因為持有量越多的人獲得的獎勵越多,變成了資源壟斷,富者越富,窮者越窮。
2. 因為挖礦權跟持有的貨幣成正比,所以就類似於利息高的情況下,大家就不願意花錢,而把錢都存銀行一樣,這樣會變成所謂的”屯幣“,降低代幣的流通性。
採用PoS機制的專案目前來說,主要是以太坊2.0(將要推出)、PIVX和NAVCOIN這幾個專案。

3.DPOS(代表權益證明)

DPOS(DELEGATED POS)是POW的一個分類,就是代表制POS。也就是說,我的錢少但是我也要獲得挖礦權,怎麼辦,我委託一個代表來做這個事。

以EOS為例,它在全球選出了21個超級節點,所有使用者可以投票決定這些節點,也可以投票廢棄、更換這些節點。

這樣做的好處是:
1.不需要耗費能源和硬體。
2.縮短了區塊確認時間(超級節點可以負責),提高了效率。
3. 不需要挖礦,也不需要完全驗證,只需要部分見證節點驗證,簡單、高效。

但是問題也很明顯:
1. 這已經不是去中心化,而是完全的中性化了。
2. 節點選舉過程存在巨大的人為操作空間。

4.PBFT(實用拜占庭容錯)

實用拜占庭將軍問題解法(PBFT),這個機制跟前面兩種都不一樣,也就是說,我不需要礦工,我也不需要挖礦。

我透過周圍的人,來判斷我記錄的賬本對不對就行了。也就是說,一個人打完一場比賽以後,我們全部50桌都記錄一遍。

那麼怎麼判斷我記錄的對不對?我問我身邊的幾桌,譬如我周圍有四桌,如果三桌都說結果是王二戰勝李四,那麼即使第四個桌說王二輸給李四了,我也不用擔心,我知道肯定結果就是王二戰勝李四。

所以聽起來很玄乎的拜占庭將軍問題,就是這麼簡單的一回事。如果你周圍有四個人,你問他們今天路上堵不堵車。如果三個人說堵車,另外一個人說不堵車。你就可以確認,路上是堵車的,也就是達成一致意見。

但是注意,達成一致意見,並不意味著意見是正確的。有可能這三個人合起夥來騙你,那麼這種情況下,也是達成一致,只不過一致的結論實際上是錯誤的。拜占庭演算法只解決是否能達成一致意見的問題,不考慮意見是否正確。

具體來說,就是在一個分散式系統中,在N≥3F+1的情況下,一致性是可能實現的(N為計算機總數,F為有問題的計算機總數)。資訊在計算機間互相交換後,各計算機列出所有得到的資訊,以大多數的結果作為解決辦法。

PBFT的優點:它不需要礦工,不需要確認,節約能源。


但是缺點是:這種模式需要節點之間進行大量可靠的網路通訊(就是我不停地要問周圍的乒乓球桌,比分是多少,設想一下有50桌、500桌、5000桌的情況,這個通訊強度呈指數級增加)。因此,這種方法只適用於一小群節點,譬如聯盟鏈。

總結:按照《經濟學人》雜誌的說法,區塊鏈是一個信任機器。信任由共識產生,而具體的共識機制包括PoW、PoS、DPoS、PBFT等等。具體選擇哪一種方法,與專案和應用有關,不應一概而論。

轉自:公眾號(計然區塊鏈研究院

更多數字貨幣資訊:www.qukuaiwang.com.cn/news

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;