1. 程式人生 > >淺談區塊鏈共識機制與分散式一致性演算法

淺談區塊鏈共識機制與分散式一致性演算法

本文通過介紹傳統分散式一致性演算法和區塊鏈共識模型,以及提出了一些有關兩者關係的觀點,讓大家有個比較系統的瞭解。

一、前言

本文打算先提出觀點。歡迎大家參與討論。

1. 傳統分散式一致性演算法和區塊鏈共識過程的異同點

相同點:

  • Append only
  • 強調序列化
  • 少數服從多數原則
  • 分離覆蓋的問題:即長鏈覆蓋短鏈區塊,多節點覆蓋少數節點日誌

不同點:

  • 傳統分散式一致性演算法大多不考慮拜占庭容錯(Byzanetine Paxos除外),即假設所有節點只發生宕機、網路故障等非人為問題,並不考慮惡意節點篡改資料的問題;
  • 傳統分散式一致性演算法是面向日誌(資料庫)的,即更通用的情況,而區塊鏈共識模型面向交易的,所以嚴格來說,傳統分散式一致性演算法應該處於區塊鏈共識模型的下面一層。
2. 區塊鏈共識模型與傳統一致性演算法的關係

考慮上面的不同點,結合私有鏈和行業鏈的性質,我們有:

  • 私有鏈:封閉生態的儲存網路,所有節點都是可信任的,如某大型集團內部多數公司。
  • 行業鏈:半封閉生態的交易網路,存在對等的不信任節點,如房地產行業A、B、C、D公司。
  • 公有鏈:開放生態的交易網路,這層主要是為行業鏈和私有鏈提供全球交易網路。

由於私有鏈是封閉生態的儲存網路,也就是說使用傳統分散式一致性模型應該是最優的;

由於聯盟行業鏈其半封閉半開放特性,使用Delegated Proof of XXX 是最優的,可以考慮以傳統一致性演算法作為基礎加入拜占庭容錯/安全防護機制進行改進。

公有鏈PoW應該仍然是最優的選擇。

如下圖所示:

二、傳統分散式一致性演算法介紹 

本文主要討論主流的Paxos演算法家族和Raft演算法,這裡拋磚引玉,網路上有關兩者的資料非常豐富,大家可自行搜尋查閱。

1. Paxos 演算法家族

1998年Lamport提出Paxos演算法,後續又增添多個改進版本的Paxos形成Paxos協議家族,且Paxos都有共同點是不容易工程實現。

  • Classic Paxos :LeaderLess,又名Basic Paxos,以下均為Paxos的變種,基於CAP定律,側重了不同方向。
  • Cheap Paxos
  • Egalitarian Paxos : conflicts rare
  • Fast Paxos : 
    Leader only when needed ,conflicts common
  • Multi-Paxos :Leader driven
  • Byzanetine Paxos

"Byzantine Paxos adds an extra message (Verify) which acts to distribute knowledge and verify the actions of the other processors".Lamport 在2011年的論文《Leaderless Byzanetine Paxos》中表示不清楚實踐中是否有效,考慮Paxos本身實現的難度,此方案工程角度不是最優,但是系統角度應該是最好的。

本小節Ref:

2 Raft 演算法

這是一個非常友好的演算法,容易理解、實現,不過它是Strong Leadership的,也就是說,

任意包含Leader的時刻,Leader擁有完全記賬權,如果此Leader節點是惡意的,後果不堪設想。

且leadership的一致性演算法都有個通病,吞吐量受單個節點的限制,這點在Raft身上體現尤甚。

3. 其他
  • VRR(Viewstamped Replication Revisited)

這也是一個基於leadership的一致性演算法,相比上述其他演算法,它的優點是延遲最小。

三、常見區塊鏈共識模型介紹

這是DPoS的白皮書,主要介紹了DPos,但也囊括了其他共識模型的介紹。

授權股權證明機制白皮書
(Delegated Proof-of-Stake ,DPOS)
作者: Daniel Larimer
April 3, 2014
翻譯:yidaidaxia_郝曉曦
位元坊數字資產研究俱樂部 翻譯作品(www.bitfarm.io)

摘要
本白皮書介紹一種股權證明機制的新實現方式,該方式可以對交易進行秒級驗證,並且能夠在更短的時間內提供比現有任何股權證明系統都更好的安全性。在比特幣網路產生一個區塊的時間過後,一個授權股權證明系統(DPOS)能使你的交易得到20%股東的核實,而在比特幣網路宣告交易已幾乎不可逆(6個區塊,約1小時)的時間過後,在DPOS機制下,通過其代表,你的交易已經得到100%股東的核實。

1.0 背景
分散式交易總賬需要在儘可能短的時間內做到安全、明確及不可逆,便於提供一個最堅實且去中心化的系統。在實踐中,該流程分為兩個方面:選擇一個獨特的節點來產生一個區塊,並使得交易總賬不可逆。

1.1 工作量證明機制(Proof of Work, POW)
第一個成功解決該問題的嘗試是比特幣系統(Bitcoin),比特幣系統使用工作量證明機制使更長總賬的產生具有計算性難度。工作量證明機制就好比是樂透,平均每10分鐘有一個節點找到一個區塊。如果兩個節點在同一個時間找到區塊,那麼網路將根據後續節點的決定來確定以哪個區塊構建總賬。從統計學角度講,一筆交易在6個區塊(約1個小時)後被認為是明確確認且不可逆的。然而,核心開發者認為,需要120個區塊(約一天),才能充分保護網路不受來自潛在更長的已將新產生的幣花掉的攻擊區塊鏈的威脅。
儘管出現更長的區塊鏈會變得不太可能,但任何擁有巨大經濟資源的人都仍有可能製造一個更長的區塊鏈或者具備足夠的雜湊算力來凍結使用者的賬戶。

1.2 股權證明機制(Proof of Stake, POS)
股權證明機制已有很多不同變種,但基本概念是產生區塊的難度應該與你在網路裡所佔的股權(所有權佔比)成比例。到目前為止,已有兩個系統開始執行:點點幣(Peercoin)和未來幣(NXT)。點點幣使用一種混合模式,用你的股權調整你的挖礦難度。未來幣使用一個確定性演算法以隨機選擇一個股東來產生下一個區塊。未來幣演算法基於你的賬戶餘額來調整你被選中的可能性。
未來幣和點點幣都分別解決了誰來生產下一個區塊的問題,但他們沒有找到在適當的時間內使區塊鏈具備不可逆的安全性的方法。根據我們能找到的資訊,做到這點,點點幣需要至少6個區塊(約一小時),未來幣需要10個區塊。我們找不到在10個區塊後未來幣能提供什麼級別安全性的根據。
我們之前釋出了基於交易的股權證明機制(Transactions as Proof of Stake, TaPOS)的白皮書,在該機制中,每筆交易都包含區塊鏈中前一個區塊的雜湊值。通過該系統,對任何人而言,網路變得越來越安全而不可逆,因為最終每個區塊都經過了股東投票。TaPOS面臨的挑戰是它沒有定義誰來產生下一個區塊。

1.3 瑞波共識機制(Ripple Consensus)
瑞波共識演算法,使一組節點能夠基於特殊節點列表達成共識。初始特殊節點列表就像一個俱樂部,要接納一個新成員,必須由51%的該俱樂部會員投票通過。共識遵循這核心成員的51%權力,外部人員則沒有影響力。由於該俱樂部由“中心化”開始,它將一直是“中心化的”,而如果它開始腐化,股東們什麼也做不了。與比特幣及點點幣一樣,瑞波系統將股東們與其投票權隔開,並因此比其他系統更中心化。

2.0 授權股權證明機制(DPOS)
當使用去中心化自治公司(Decentralized Autonomous Company, DAC)這一說法時,去中心化表示每個股東按其持股比例擁有影響力,51%股東投票的結果將是不可逆且有約束力的。其挑戰是通過及時而高效的方法達到51%批准。
為達到這個目標,每個股東可以將其投票權授予一名代表。獲票數最多的前100位代表按既定時間表輪流產生區塊。每名代表分配到一個時間段來生產區塊。所有的代表將收到等同於一個平均水平的區塊所含交易費的10%作為報酬。如果一個平均水平的區塊含有100股作為交易費,一名代表將獲得1股作為報酬。
網路延遲有可能使某些代表沒能及時廣播他們的區塊,而這將導致區塊鏈分叉。然而,這不太可能發生,因為製造區塊的代表可以與製造前後區塊的代表建立直接連線。建立這種與你之後的代表(也許也包括其後的那名代表)的直接連線是為了確保你能得到報酬。
該模式可以每30秒產生一個新區塊,並且在正常的網路條件下區塊鏈分叉的可能性極其小,即使發生也可以在幾分鐘內得到解決。

2.1 成為一名代表
成為一名代表,你必須在網路上註冊你的公鑰,然後分配到一個32位的特有識別符號。然後該識別符號會被每筆交易資料的“頭部”引用。

2.2 授權你的選票
每個錢包有一個引數設定視窗,在該窗口裡使用者可以選擇一個或更多的代表,並將其分級。一經設定,使用者所做的每筆交易將把選票從“輸入代表”轉移至“輸出代表”。一般情況下,使用者不會建立特別以投票為目的的交易,因為那將耗費他們一筆交易費。但在緊急情況下,某些使用者可能覺得通過支付費用這一更積極的方式來改變他們的投票是值得的。

2.3 保持代表誠實
每個錢包將顯示一個狀態指示器,讓使用者知道他們的代表表現如何。如果他們錯過了太多的區塊,那麼系統將會推薦使用者去換一個新的代表。如果任何代表被發現簽發了一個無效的區塊,那麼所有標準錢包將在每個錢包進行更多交易前要求選出一個新代表。

2.4 解決區塊鏈分叉
和工作量證明系統及其他股權證明系統一樣,最佳區塊鏈是最長的有效區塊鏈。任何時候,一名代表錯過簽發一個區塊的機會,該區塊鏈將比潛在競爭對手短。只要在你的交易被寫入區塊後的100個區塊中的51%被生產出來了,那麼你就可以安全地認為你在主區塊鏈上。
也許,在防止區塊鏈分叉所導致的損失方面,最重要的事是在事發後第一時間得知訊息。因為代表們通過生產區塊得到很好的報酬,他們將保持接近100%的線上時間來防止因被投票罷免而損失收入。你可以安全地認為如果在過去的10個區塊中,有一兩個區塊錯過生產,則網際網路的某些部分可能正發生連線問題,那麼使用者應該對此特別警覺並要求額外的確認數。如果10區塊中有超過5個錯過生產,那麼這意味著你很可能在一條支鏈上,因此應該停止所有交易,直到分叉得到解決。
以一種及時的方式(少於5分鐘)簡單地發現並警示使用者網路分叉,是可以最小化潛在損失的非常重要的能力。而知道你是否正處在一條支鏈上則更為重要。

2.5 100名代表是去中心化的嗎?
因為去中心化已經成為一個流行術語,所以其定義很難完全固定。我們將自由市場看作去中心化的基本形式,並將對進入自由市場設定障礙看作是所有中心化的基礎。像任何事物一樣,中心化有程度之分,所以我們把授權股權證明機制與其它方案的中心化程度進行對比。

2.5.1 比特幣
比特幣系統目前正以授權工作量證明(Delegated Proof of Work, DPOW)為基礎而執行,因此有大約10名代表控制了絕大多數的雜湊算力。在那些為其競爭而能使用規模經濟進行無收益挖礦的人手中,雜湊算力本身就是中心化的。最後,工作量證明機制為進入市場設定障礙,使得“在職”的區塊製造者無法輕易被取代。與比特幣系統相比,DPOS在區塊生產方面至少去中西化了10倍,並且也許在市場競爭方面去中心化了無數倍。
儘管在雜湊算力方面有一定量的去中心化,當想到掌控比特幣系統的股東(比特幣持有者)所持股份的佔比,我們認為比特幣系統是最中心化的。如果你考慮使用比特幣體系的使用者總數,其中參與挖礦的人很可能少於百分之一。

2.5.2 點點幣
點點幣是一個混合系統,所以它由於工作量證明機制而是部分中心化的。和比特幣系統一樣,它也有礦池。與比特幣相比,點點幣無疑是更去中心化的,然而,因為股權證明機制礦池需要使用者保持他們的電腦線上且錢包解鎖,只有一小部分的股東參與了任何形式的挖礦。

2.5.3 未來幣
未來幣使用透明鍛造,以確定的選出下一個製造節點。可以將其類比為,使用授權股權證明機制但你只能將你的投票權授予你自己,而你獲得鍛造區塊機會的頻率直接取決於你的賬戶餘額。在這個意義上來說,未來幣比點點幣和比特幣更為去中心化。但由於對安全風險的顧慮以及事實上大多數常規使用者不會整天開啟他們的電腦來籍此獲得鍛造機會方面的優勢,它仍然遭受著少的可憐的挖礦參與度。
從這個角度來講,我們可以斷定未來幣網路是由一小部分股東來保障網路安全的。事實上,如果你不上線投票,那麼你將失去你的選票。為了解決這個問題,一些未來幣使用者用他們的股權建立股權池,並信任第三方來為他們挖礦。這是以一種形式的授權股權證明來提高股東參與度,但這也使他們的賬戶餘額在他們參加這些礦池時承受風險。

3.0 攻擊
一般而言,網路必須抵禦兩種型別的攻擊:拒絕服務攻擊和雙重支付攻擊。一個攻擊者通過不把一些或全部的交易加入總賬來進行拒絕服務攻擊。這種攻擊可以由任何擁有51%網路(無論比特幣、未來幣或其它)的人進行。而利用在網路正試圖達成共識時的短期優勢,可以進行雙重支付攻擊。
為抵禦這些攻擊,網路必須使51%的股東儘快達成協議。

3.1 防止排除交易
擁有全部經股東投票選出的100名代表,並且按要求輪流生產區塊,意味著任何一筆由至少1%的股東批准的交易能夠在30分鐘內加入總賬。這意味著沒有代表可以通過將投票支援其他代表的交易排除在外來獲取利益。

3.2 將一些代表的權力中心化
與其所被授權的投票權無關,這前100人所獲得的權力權重是相同的,每名代表都有一份相等的投票權。因此,無法通過獲得超過1%的選票而將權力集中到一個單一代表手上。
個人或者組織控制區塊鏈的多名代表是有可能的。但是這個過程將需要欺騙很大比例的股東數去支援“傀儡”。
即使可以建立這51%傀儡,他們擾亂網路的能力仍將是有限的、能夠被快速識別快速糾正的。沒有工作量證明機制設定的進入障礙,佔據多數的誠實使用者會把攻擊鑑別出來,然後將程式碼分叉並無視攻擊者生產的區塊。這種攻擊可以擾亂網路,但不會是致命的。

3.3 針對代表的分散式拒絕服務攻擊(DDOS)
因為只有100名代表,   可以想象一個攻擊者對每名輪到生產區塊的代表依次進行拒絕服務攻擊。幸運的是,由於事實上每名代表的標識是其公鑰而非IP地址,這種特定攻擊的威脅很容易被減輕。這將使確定DDOS攻擊目標更為困難。而代表之間的潛在直接連線,將使妨礙他們生產區塊變得更為困難。

4.0 基於交易的股權證明機制(TaPOS)
代表制是一個短時間內達成堅固共識的高效方式,而TaPOS為股東們提供了一個長效機制來直接批准他們的代表的行為。平均而言,51%的股東在6個月內會直接確認每個區塊。而取決於活躍流通的股份所佔的比例,差不多10%的股東可以在幾天內確認區塊鏈。這種直接確認保障了網路的長期安全,並使所有的攻擊嘗試變得極度清晰易見。

5.0 高質量的服務
假設一個DPOS系統擁有100億美元的市場總量,平均每年的交易費為0.25%,代表們合計獲得所有交易費的10%,那麼每名代表每年能獲得25,000美元以使其節點保持線上。
這是一個利潤可觀的角色,許多人將為獲取它持續競爭。這意味著每個想要獲得這份工作的人都會想方設法從擁有這份工作的人那裡把它“偷走”。為做到這點,他們將對代表行為進行統計學分析,以找到對於標準演算法的任何偏離行為。一旦找到這種偏離,他們就能有希望贏得一些選票。
那些擁有這份工作的人,可能會全力以赴地證明他們正在按標準軟體執行。他們越有效地證明其對區塊生產的正直性,越有可能保住他們的工作。你可以想象開發者會很快製作出系統,代表們可以通過這些系統快速證明哪些交易得到了廣泛的散播。
事實上,市場競爭將產生用以證明代表們的正直性與可靠性的最具創造性的解決方案。讓網路變得更安全的工作可以獲得很多收益,而嘗試繞輪網路則得不到什麼好處。

6.0 結論
DPOS流程與TaPOS結合所產生的網路,其網路共識的可證明性將至少3倍於比特幣、點點幣及未來幣網路。DPOS能夠更快地達成共識,同時消除隨機小股東帶來小規模干擾的可能性。經濟激勵確保了代表們致力於證明他們有良好行為,並可能採用類似於瑞波系統的共識演算法(來實現這種證明)。DPOS,事實上,是一種通過無網路分叉之虞的去中心化方式來產生瑞波特殊節點列表的方法。