天天看點

【區塊鍊之技術進階】掰一掰區塊鍊共識機制與分布式一緻性算法

咱們在之前的很多篇文章裡簡單地提起了“共識算法”以及“共識攻擊”,大家應該對于我們之前提到的“共識攻擊”印象還比較深刻吧,對的,就是我們所說的這和公司占有股份一個道理,當你占有整個公司“51%”的股份時,那就是控股了,豈不是可以為所欲為了呢?在區塊鍊技術這也一樣,咱們都知道區塊鍊記賬以後是不可以篡改的,就算是合理交易寫錯位址了也不行!but!當你能說服整個區塊鍊上51%的結點同意你的請求時就能夠修改記賬資訊,當這一方法用到不好的方面,那就是“共識攻擊”了。而“共識攻擊”就是的原理還是“共識算法”,那麼這篇文章就帶大家走進共識算法咯!

本文是【區塊鍊之技術進階】的第七篇文章,這篇文章将為大家介紹傳統分布式一緻性算法和區塊鍊共識模型,以及一些有關兩者關系的觀點,并且将介紹一些常見的區塊鍊共識模型,讀完本文相信大家會對于傳統分布式一緻性算法和區塊鍊共識過程的異同、關系以及區塊鍊技術的共識算法有一個更加深刻的了解。

<b>本文技術要點:</b>

【區塊鍊之技術進階】掰一掰區塊鍊共識機制與分布式一緻性算法

<b>相同點:</b>

append only

強調序列化

少數服從多數原則

分離覆寫的問題:即長鍊覆寫短鍊區塊,多節點覆寫少數節點日志

<b>不同點:</b>

傳統分布式一緻性算法大多不考慮拜占庭容錯(byzanetine paxos除外),即假設所有節點隻發生當機、網絡故障等非人為問題,并不考慮惡意節點篡改資料的問題;

傳統分布式一緻性算法是面向日志(資料庫)的,即更通用的情況,而區塊鍊共識模型面向交易的,是以嚴格來說,傳統分布式一緻性算法應該處于區塊鍊共識模型的下面一層。

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

私有鍊:封閉生态的存儲網絡,所有節點都是可信任的,如某大型集團内部多數公司。

行業鍊:半封閉生态的交易網絡,存在對等的不信任節點,如房地産行業a、b、c、d公司。

公有鍊:開放生态的交易網絡,這層主要是為行業鍊和私有鍊提供全球交易網絡。

由于私有鍊是封閉生态的存儲網絡,也就是說使用傳統分布式一緻性模型應該是最優的;由于聯盟行業鍊其半封閉半開放特性,使用delegated proof of xxx 是最優的,可以考慮以傳統一緻性算法作為基礎加入拜占庭容錯/安全防護機制進行改進。公有鍊pow應該仍然是最優的選擇。

如下圖所示:

【區塊鍊之技術進階】掰一掰區塊鍊共識機制與分布式一緻性算法

本文主要讨論主流的paxos算法家族和raft算法,這裡抛磚引玉,網絡上有關兩者的資料非常豐富,大家可自行搜尋查閱。

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:

<a target="_blank" href="https://en.wikipedia.org/wiki/paxos_(computer_science)">wikipedia_paxos</a>

<a target="_blank" href="http://research.microsoft.com/en-us/um/people/lamport/pubs/disc-leaderless-web.pdf">leaderless byzanetine paxos</a>

這是一個非常友好的算法,容易了解、實作,不過它是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%股東的核實。

分布式交易總賬需要在盡可能短的時間内做到安全、明确及不可逆,便于提供一個最堅實且去中心化的系統。在實踐中,該流程分為兩個方面:選擇一個獨特的節點來産生一個區塊,并使得交易總賬不可逆。

第一個成功解決該問題的嘗試是比特币系統(bitcoin),比特币系統使用工作量證明機制使更長總賬的産生具有計算性難度。工作量證明機制就好比是樂透,平均每10分鐘有一個節點找到一個區塊。如果兩個節點在同一個時間找到區塊,那麼網絡将根據後續節點的決定來确定以哪個區塊建構總賬。從統計學角度講,一筆交易在6個區塊(約1個小時)後被認為是明确确認且不可逆的。然而,核心開發者認為,需要120個區塊(約一天),才能充分保護網絡不受來自潛在更長的已将新産生的币花掉的攻擊區塊鍊的威脅。

盡管出現更長的區塊鍊會變得不太可能,但任何擁有巨大經濟資源的人都仍有可能制造一個更長的區塊鍊或者具備足夠的哈希算力來當機使用者的賬戶。

股權證明機制已有很多不同變種,但基本概念是産生區塊的難度應該與你在網絡裡所占的股權(所有權占比)成比例。到目前為止,已有兩個系統開始運作:點點币(peercoin)和未來币(nxt)。點點币使用一種混合模式,用你的股權調整你的挖礦難度。未來币使用一個确定性算法以随機選擇一個股東來産生下一個區塊。未來币算法基于你的賬戶餘額來調整你被選中的可能性。

未來币和點點币都分别解決了誰來生産下一個區塊的問題,但他們沒有找到在适當的時間内使區塊鍊具備不可逆的安全性的方法。根據我們能找到的資訊,做到這點,點點币需要至少6個區塊(約一小時),未來币需要10個區塊。我們找不到在10個區塊後未來币能提供什麼級别安全性的根據。

我們之前釋出了基于交易的股權證明機制(transactions as proof of stake, tapos)的白皮書,在該機制中,每筆交易都包含區塊鍊中前一個區塊的哈希值。通過該系統,對任何人而言,網絡變得越來越安全而不可逆,因為最終每個區塊都經過了股東投票。tapos面臨的挑戰是它沒有定義誰來産生下一個區塊。

瑞波共識算法,使一組節點能夠基于特殊節點清單達成共識。初始特殊節點清單就像一個俱樂部,要接納一個新成員,必須由51%的該俱樂部會員投票通過。共識遵循這核心成員的51%權力,外部人員則沒有影響力。由于該俱樂部由“中心化”開始,它将一直是“中心化的”,而如果它開始腐化,股東們什麼也做不了。與比特币及點點币一樣,瑞波系統将股東們與其投票權隔開,并是以比其他系統更中心化。

當使用去中心化自治公司(decentralized autonomous company, dac)這一說法時,去中心化表示每個股東按其持股比例擁有影響力,51%股東投票的結果将是不可逆且有限制力的。其挑戰是通過及時而高效的方法達到51%準許。

為達到這個目标,每個股東可以将其投票權授予一名代表。獲票數最多的前100位代表按既定時間表輪流産生區塊。每名代表配置設定到一個時間段來生産區塊。所有的代表将收到等同于一個平均水準的區塊所含交易費的10%作為報酬。如果一個平均水準的區塊含有100股作為交易費,一名代表将獲得1股作為報酬。

網絡延遲有可能使某些代表沒能及時廣播他們的區塊,而這将導緻區塊鍊分叉。然而,這不太可能發生,因為制造區塊的代表可以與制造前後區塊的代表建立直接連接配接。建立這種與你之後的代表(也許也包括其後的那名代表)的直接連接配接是為了確定你能得到報酬。

該模式可以每30秒産生一個新區塊,并且在正常的網絡條件下區塊鍊分叉的可能性極其小,即使發生也可以在幾分鐘内得到解決。

成為一名代表,你必須在網絡上注冊你的公鑰,然後配置設定到一個32位的特有辨別符。然後該辨別符會被每筆交易資料的“頭部”引用。

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

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

和工作量證明系統及其他股權證明系統一樣,最佳區塊鍊是最長的有效區塊鍊。任何時候,一名代表錯過簽發一個區塊的機會,該區塊鍊将比潛在競争對手短。隻要在你的交易被寫入區塊後的100個區塊中的51%被生産出來了,那麼你就可以安全地認為你在主區塊鍊上。

也許,在防止區塊鍊分叉所導緻的損失方面,最重要的事是在事發後第一時間得知消息。因為代表們通過生産區塊得到很好的報酬,他們将保持接近100%的線上時間來防止因被投票罷免而損失收入。你可以安全地認為如果在過去的10個區塊中,有一兩個區塊錯過生産,則網際網路的某些部分可能正發生連接配接問題,那麼使用者應該對此特别警覺并要求額外的确認數。如果10區塊中有超過5個錯過生産,那麼這意味着你很可能在一條支鍊上,是以應該停止所有交易,直到分叉得到解決。

以一種及時的方式(少于5分鐘)簡單地發現并警示使用者網絡分叉,是可以最小化潛在損失的非常重要的能力。而知道你是否正處在一條支鍊上則更為重要。

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

比特币系統目前正以授權工作量證明(delegated proof of work, dpow)為基礎而運作,是以有大約10名代表控制了絕大多數的哈希算力。在那些為其競争而能使用規模經濟進行無收益挖礦的人手中,哈希算力本身就是中心化的。最後,工作量證明機制為進入市場設定障礙,使得“在職”的區塊制造者無法輕易被取代。與比特币系統相比,dpos在區塊生産方面至少去中西化了10倍,并且也許在市場競争方面去中心化了無數倍。

盡管在哈希算力方面有一定量的去中心化,當想到掌控比特币系統的股東(比特币持有者)所持股份的占比,我們認為比特币系統是最中心化的。如果你考慮使用比特币體系的使用者總數,其中參與挖礦的人很可能少于百分之一。

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

未來币使用透明鍛造,以确定的選出下一個制造節點。可以将其類比為,使用授權股權證明機制但你隻能将你的投票權授予你自己,而你獲得鍛造區塊機會的頻率直接取決于你的賬戶餘額。在這個意義上來說,未來币比點點币和比特币更為去中心化。但由于對安全風險的顧慮以及事實上大多數正常使用者不會整天開啟他們的電腦來籍此獲得鍛造機會方面的優勢,它仍然遭受着少的可憐的挖礦參與度。

從這個角度來講,我們可以斷定未來币網絡是由一小部分股東來保障網絡安全的。事實上,如果你不上線投票,那麼你将失去你的選票。為了解決這個問題,一些未來币使用者用他們的股權建立股權池,并信任第三方來為他們挖礦。這是以一種形式的授權股權證明來提高股東參與度,但這也使他們的賬戶餘額在他們參加這些礦池時承受風險。

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

擁有全部經股東投票選出的100名代表,并且按要求輪流生産區塊,意味着任何一筆由至少1%的股東準許的交易能夠在30分鐘内加入總賬。這意味着沒有代表可以通過将投票支援其他代表的交易排除在外來擷取利益。

與其所被授權的投票權無關,這前100人所獲得的權力權重是相同的,每名代表都有一份相等的投票權。是以,無法通過獲得超過1%的選票而将權力集中到一個單一代表手上。

個人或者組織控制區塊鍊的多名代表是有可能的。但是這個過程将需要欺騙很大比例的股東數去支援“傀儡”。即使可以建立這51%傀儡,他們擾亂網絡的能力仍将是有限的、能夠被快速識别快速糾正的。沒有工作量證明機制設定的進入障礙,占據多數的誠實使用者會把攻擊鑒别出來,然後将代碼分叉并無視攻擊者生産的區塊。這種攻擊可以擾亂網絡,但不會是緻命的。

因為隻有100名代表,   可以想象一個攻擊者對每名輪到生産區塊的代表依次進行拒絕服務攻擊。幸運的是,由于事實上每名代表的辨別是其公鑰而非ip位址,這種特定攻擊的威脅很容易被減輕。這将使确定ddos攻擊目标更為困難。而代表之間的潛在直接連接配接,将使妨礙他們生産區塊變得更為困難。

代表制是一個短時間内達成堅固共識的高效方式,而tapos為股東們提供了一個長效機制來直接準許他們的代表的行為。平均而言,51%的股東在6個月内會直接确認每個區塊。而取決于活躍流通的股份所占的比例,差不多10%的股東可以在幾天内确認區塊鍊。這種直接确認保障了網絡的長期安全,并使所有的攻擊嘗試變得極度清晰易見。

假設一個dpos系統擁有100億美元的市場總量,平均每年的交易費為0.25%,代表們合計獲得所有交易費的10%,那麼每名代表每年能獲得25,000美元以使其節點保持線上。

這是一個利潤可觀的角色,許多人将為擷取它持續競争。這意味着每個想要獲得這份工作的人都會想方設法從擁有這份工作的人那裡把它“偷走”。為做到這點,他們将對代表行為進行統計學分析,以找到對于标準算法的任何偏離行為。一旦找到這種偏離,他們就能有希望赢得一些選票。那些擁有這份工作的人,可能會全力以赴地證明他們正在按标準軟體運作。他們越有效地證明其對區塊生産的正直性,越有可能保住他們的工作。你可以想象開發者會很快制作出系統,代表們可以通過這些系統快速證明哪些交易得到了廣泛的散播。

事實上,市場競争将産生用以證明代表們的正直性與可靠性的最具創造性的解決方案。讓網絡變得更安全的工作可以獲得很多收益,而嘗試繞輪網絡則得不到什麼好處。

dpos流程與tapos結合所産生的網絡,其網絡共識的可證明性将至少3倍于比特币、點點币及未來币網絡。dpos能夠更快地達成共識,同時消除随機小股東帶來小規模幹擾的可能性。經濟激勵確定了代表們緻力于證明他們有良好行為,并可能采用類似于瑞波系統的共識算法(來實作這種證明)。dpos,事實上,是一種通過無網絡分叉之虞的去中心化方式來産生瑞波特殊節點清單的方法。

<b>下期預</b><b>告</b>

下期我們将分享【區塊鍊之技術進階】的第八篇,将會為我們從另一個角度分享區塊鍊技術,談一談區塊鍊技術的安全問題和發展瓶頸,為我們潑一盆冷水,但是正是這盆冷水才能讓我們冷靜而理性去思考區塊鍊的未來。

<b>【區塊鍊之技術進階】系列文章:</b>

<a href="https://yq.aliyun.com/articles/60201">區塊鍊:通往網際網路第二紀元的革命</a>

<a target="_blank" href="https://yq.aliyun.com/articles/60207?spm=5176.100239.blogcont60218.8.9jxtjd">金融的未來,區塊鍊将用于何方?</a>

<a href="https://yq.aliyun.com/articles/60218">讓這篇技術貼告訴你區塊鍊是怎麼運作的</a>

<a href="https://yq.aliyun.com/articles/60232">扒一扒某乎上面對于區塊鍊的了解(一)</a>

<a href="https://yq.aliyun.com/articles/60258">扒一扒某乎上面對于區塊鍊的了解(二)</a>

<a href="https://yq.aliyun.com/articles/60399">從技術現實了解區塊鍊:基于sql模型建立bql</a>

<a href="https://yq.aliyun.com/articles/60400">掰一掰區塊鍊共識機制與分布式一緻性算法</a>

<a href="https://yq.aliyun.com/articles/60401?spm=5176.100239.blogcont60218.14.9jxtjd">attention please!區塊鍊技術的風險!</a>

<b>其他部分首篇文章:</b>

<a target="_blank" href="https://yq.aliyun.com/articles/60131">【區塊鍊之菜鳥入門】親,你淘的區塊鍊到了!</a>

<a href="https://yq.aliyun.com/articles/60425" target="_blank">【區塊鍊之技術實戰】群雄激辯區塊鍊</a>

<a href="https://yq.aliyun.com/articles/60541" target="_blank">【區塊鍊與未來】區塊鍊隻與網際網路+金融有關?讓法律人和你聊聊</a>

繼續閱讀