【共識專欄】共識的分類(上)

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"—— Part1 共識的分類 ——","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從早期的分佈式一致性算法的緩慢發展到現如今區塊鏈共識的百花齊放,共識算法的發展已經走過了四十年左右的時光。不同的共識算法的側重點不同,因此它們所面臨的問題、環境也不一樣。本文將從如下幾個不同角度對共識算法進行分類:","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"▲容錯類型","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據是否容忍拜占庭錯誤,可以將共識算法分爲兩類。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1)拜占庭容錯共識算法:PBFT、PoW、PoS、DPoS","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2)非拜占庭容錯共識算法:Paxos、Raft","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"是否容忍拜占庭標誌着該算法是否能夠應用到低信任的網絡當中。通常來說,公有鏈環境中必須使用拜占庭容錯算法,而聯盟鏈中可以根據聯盟參與方之間的信任程度進行選擇。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"▲算法確定性","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據算法的確定性,可以將共識算法分爲兩類。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1)確定性共識算法:Paxos、Raft、PBFT","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2)概率性共識算法:PoW、部分PoS","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"確定性共識指的是","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"共識決策一旦達成,就不存在回退的可能性","attrs":{}},{"type":"text","text":",這一類通常是傳統的分佈式一致性算法及其改進版本。而概率性指的是已經達成的","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"共識決策在未來有一定的概率會被回退","attrs":{}},{"type":"text","text":",雖然這個概率隨着時間的推移會趨於爲0,這一類通常是應用在公有鏈上的區塊鏈共識算法。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"▲選主策略","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據選主的策略,可以將共識算法分爲兩類。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1)選舉類共識算法:Raft、PBFT","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2)證明類共識算法:PoW、PoS","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"選舉類共識指的是通過投票選擇出塊節點,","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"同一個節點可以連續多輪作爲出塊節點存在","attrs":{}},{"type":"text","text":",這一類通常是傳統的分佈式一致性算法及其改進版本。證明類共識算法指的是","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"出塊節點需要通過某種方式證明自己具備某種能力","attrs":{}},{"type":"text","text":",從而獲得出塊權,這一類的共識算法通常每一輪的出塊節點都不相同,從而保證了出塊權的公平性,通常應用在公有鏈上。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"—— Part2 非拜占庭容錯共識算法 ——","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"Paxos","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Paxos是","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"第一個異步網絡模型下能夠保證正確性且容錯","attrs":{}},{"type":"text","text":"的共識算法。在此之前,FLP明確指出在異步網絡模型中,只要存在節點故障,就不可能存在一個可終止的共識算法。因此Paxos也做出了一定的犧牲:Paxos犧牲了一定的活性從而保證了系統的安全性,即在系統處於異步狀態時暫停共識的推進,只要有半數以上的節點恢復至同步狀態之後,就可以推進共識,完成終止。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在Paxos中,會存在一個或者多個節點同時想要競選成爲","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"協調者","attrs":{}},{"type":"text","text":"(也叫做提案者Proposer),而每一輪共識最終只會選出一個Proposer進行最終提案值的選擇。Proposer提出一個決策值,並收集其他","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"參與者","attrs":{}},{"type":"text","text":"節點(也叫做接受者Acceptor)的投票。最終,Proposer會宣佈選定的最終決策值。如果能夠達成一個最終決策的話,該決策值會被傳遞到對此感興趣的節點(也叫做學習者Learner)中。可以看出,Paxos是一個保證了公平性的算法,即所有節點都可以競選成爲Proposer,沒有哪個節點擁有特殊的權利。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/d8/d8f61e4adfc32a445c503f233ec2e200.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖1.Basic Paxos共識流程","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Paxos在一定程度上給出了一種異步網絡下分佈式一致性問題的解決範式,但是它本身的算法過於晦澀難懂,以至於Lamport本人也在Paxos發表之後又寫了一篇論文[1]來重新解釋Paxos的流程。同時,一個Paxos算法的正確實現也被證實是非常有難度的挑戰,有興趣的讀者也可以閱讀Google的實踐論文[2]來理解實現過程中的一些權衡與考量。","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"Raft","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Paxos誠然是一個非常有影響力的共識算法,可以說奠定了分佈式一致性算法的基礎,但是由於其難以理解以及實現難度非常之大,想要實現一個完整的Paxos算法非常的困難。因此,出現了非常多的Paxos變體,其中最著名的當屬Raft共識算法。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Raft是一種用來管理日誌複製的一致性算法,旨在易於理解。它具備了Paxos的容錯性和性能,不同之處在於它將一致性問題分解爲相對獨立的三子問題,分別是","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"領導選取(leader election)","attrs":{}},{"type":"text","text":",","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"日誌複製(log replication)","attrs":{}},{"type":"text","text":"和","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"安全性(safety)","attrs":{}},{"type":"text","text":"。這使得Raft更好理解並且更容易應用到實際系統的建立中。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在Raft中,每一個節點一定會處於以下三種狀態中的一個:Leader(主節點)、Candidate(候選節點)、Follower(從節點)。在正常情況下,只有一個節點是Leader,剩下的節點是Follower。Leader負責處理所有來自客戶端的請求(如果一個客戶端與Follower進行通信,Follower會將信息轉發給Leader),生成日誌數據(對應在區塊鏈中即負責打包)並廣播給Follower節點。Follower是被動的:他們不會主動發送任何請求,只能單向接收從Leader發來的日誌數據。Candidate是在選舉下一任Leader的過程中出現的過渡狀態,任何一個節點在發現主節點故障之後都可以成爲Candidate並競選成爲Leader。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Raft算法將時間劃分成爲任意不同長度的","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"term","attrs":{}},{"type":"text","text":"(任期)。任期用連續的數字進行表示。每一個任期的開始都是一次選舉。如果一個Candidate贏得了選舉,它就會在該任期的剩餘時間擔任","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"Leader","attrs":{}},{"type":"text","text":"。在某些情況下,選票會被瓜分,有可能沒有選出Leader,那麼,另一個任期將會開始,並且立刻開始下一次選舉。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"每一臺服務器都存儲着一個數字作爲當前任期的編號,這個數字單調遞增。當節點之間進行通信時,會互相交換當前任期號,若一個節點的當前任期號比其它節點的小,則會更新爲較大的任期號。如果一個Candidate或者Leader意識到它的任期號過時了,就會立刻轉換爲Follower狀態。當一個節點收到過時任期號的請求,就會直接拒絕這次請求。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/a9/a9559365b6e62f6e1c6d68b604e9188d.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖2.Raft共識流程","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"總結","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Paxos和Raft都是故障容錯(Crash Fault Tolerance)共識,是非拜占庭問題的容錯技術。非拜占庭是指分佈式的系統中存在故障(crash fault),但不存在惡意(corrupt)節點的場景(即可能消息丟失或重複,但無錯誤消息)下的共識達成問題,是分佈式共識領域最爲常見的問題。相比較於Paxos,Raft更爲簡潔,同時可以保證同等的容錯能力和性能。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"—— Part3 概率性共識算法 ——","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"  PoW","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"工作量證明(Proof of Work,PoW)最早在1993年由Cynthia Dwork與Moni Naor在學術論文[3]中提及,並於同年由Markus Jakobsson與Ari Juels正式提出了“工作量證明”這個概念[4]。起初,PoW主要用於防止垃圾郵件的產生。2008年,PoW作爲共識算法應用在比特幣系統中。PoW有以下3個基本屬性:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1)數學難題:PoW共識算法設計了一個","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"數學難題(Mathematical Puzzle)","attrs":{}},{"type":"text","text":",要求節點在生成新區塊之前,需要消耗一定的計算資源才能獲得難題的解,從而將區塊廣播到網絡,並且其他節點可以輕易驗證這個解的有效性。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2)哈希算法:","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"哈希算法(Hash Algorithm)","attrs":{}},{"type":"text","text":"是一種能夠把任意長度的輸入變換成固定長度的輸出的算法,可被記爲y = hash(x),不同的輸入x得到的輸出y各不相同。除此之外,在已知x時可以快速計算得到y,但是在已知y的情況下,通常只能通過窮舉法才能逆推出x。由於哈希算法具有正向快速、逆向困難的特性,常使用哈希算法來設計PoW的數學難題。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"3)生成區塊:在一輪區塊生成中,系統通過對輸出值設定條件來調整數學問題的難度值,節點在成功解出問題並通過驗證上鍊後,將會獲得相應的獎勵。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在生成新的區塊之前,PoW會預設目標值,要求出塊節點計算出的哈希值小於該目標值,以此來表示PoW的難度。爲了生成區塊並獲得獎勵,出塊節點首先收集一組交易打包成一個區塊,並開始嘗試解決數學問題進行出塊。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在此期間,出塊節點需要生成隨機數,同當前區塊數據與前一個區塊的哈希進行多輪哈希運算,計算當前區塊的哈希值:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/cf/cff742fa20a0758c9f0250a34164281d.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"直到當前區塊哈希滿足條件:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/44/4439709b33af45bf44dea08364724413.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此時的nonce即爲本次數學問題的答案,出塊節點將當前區塊的哈希、nonce值、前一個區塊的哈希作爲區塊頭部數據加入當前區塊,如圖3所示。然後將該區塊廣播到區塊鏈網絡中,等待驗證通過後,出塊節點就可以取到相應的獎勵。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/f6/f6b401911c2545c01eaefacbcc93b2af.png","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"圖3.PoW區塊結構表示","attrs":{}}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"PoS","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"前面提到的工作量證明共識算法,就是通過算力來爭奪“領導者”的資格,但是工作量證明過程中的大量資源浪費,導致其很難被更大規模的應用接受。對此,有人開始嘗試直接使用“股權(Stake)”作爲標準進行“領導者”資格的競選,並隨之產生了權益證明(Proof of Stake,PoS)共識算法。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"PoS的思想來源於社會:","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"一個人擁有的股份量越多,其獲得的股息和分紅就會越高","attrs":{}},{"type":"text","text":"。如果區塊鏈系統也採用這種方法進行維護,不需要過多的資源消耗,也能夠使得區塊鏈資產有自然的通脹。節點通過投入一定量的通證參與共識,根據通證持有情況獲得打包新區塊的權利並獲得獎勵。目前,以太坊也有轉向PoS的以太坊2.0計劃。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了描述通證持有情況,PoS共識算法引入了“幣齡”的概念。","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"幣齡(Coin-age)","attrs":{}},{"type":"text","text":"表示節點持有部分通證的時長,當節點將通證作爲“股份”投入後,這部分通證就開始積累幣齡,幣齡的計算方式如下:","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https://static001.geekbang.org/infoq/8b/8b52930ebd6006877bcc3d3154892448.jpeg","alt":"圖片","title":null,"style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":null,"fromPaste":true,"pastePass":true}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在使用了這部分通證後,無論是用來進行區塊生成或者簡單的交易,這部分通證對應的幣齡將被銷燬。在最初的PoS共識算法中,幣齡是進行評判的重要標準,節點在區塊生成時所使用的幣齡越高就越容易產生區塊,這可以在一定程度上制約短期投機行爲。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"PoS共識算法在進行區塊生成時,將同時考慮幣齡與哈希運算難度,使得節點只需要消耗很少的計算資源就可以完成區塊生成。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"DPoS","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"委託權益證明(Delegated Proof of Stake,DPoS)","attrs":{}},{"type":"text","text":"共識算法[5]中,選舉人通過選舉產生代表,由代表進行直接的區塊產生,選舉人通過選舉代表人間接行使競爭出塊的權利。委託權益證明共識算法,實際上就是通過一系列選拔規則對候選人進行制約,並制定一套投票規則。普通參與者通過投票的方式從候選者中選拔出委託人,並由委託人進行出塊,不滿足要求的委託人將會被取消權限,並重新選舉產生新的委託人。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"DPoS保留了一定的中心化特性,因此能夠保證高效率的交易吞吐,速率可以比肩常見的中心化機構,例如Visa、Mastercard等。在該算法中,去中心化的特性主要體現在對於生成區塊的權利可控。即股東通過投票,選擇自己信任的代表節點,並由代表節點進行區塊鏈數據的維護。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"—— Part4 總結 ——","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"上述提到的共識算法大多用於公鏈場景,比如比特幣,以太坊等,由於公鏈場景下節點規模龐大,因此較難採用確定性的分佈式一致性算法。PoW通過工作量證明的方式來達到較高的安全性以及去中心化程度,相較於PoW,PoS犧牲了一定的安全性來降低能源消耗,而DPoS以更爲激進的方式,選舉出較少節點來提升共識效率。","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在企業級場景下,節點數量不會非常多,但是對於交易吞吐量以及最終確定性要求較高,因此常用聯盟鏈方式來進行建設,從而滿足企業級需求。在實際應用場景中,由於拜占庭容錯問題,常會使用PBFT及其變體拜占庭容錯類共識算法。","attrs":{}},{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"對「共識專欄」感興趣的小夥伴,添加小助手(18458407117)加入技術交流羣,直面大咖一對一問答~","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"作者簡介","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"袁超","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"趣鏈科技基礎平臺部共識算法研究小組","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong","attrs":{}}],"text":"參考文獻","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"[1] Lamport L. Paxos made simple[J]. ACM Sigact News, 2001, 32(4): 18-25.","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"[2] Chandra T D, Griesemer R, Redstone J. Paxos made live: an engineering perspective[C]//Proceedings of the twenty-sixth annual ACM symposium on Principles of distributed computing. 2007: 398-407.","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"[3] Dwork C, Naor M. Pricing via processing or combatting junk mail[C]//Annual International Cryptology Conference. Springer, Berlin, Heidelberg, 1992: 139-147.","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"[4] Jakobsson M, Juels A. Proofs of work and bread pudding protocols[M]//Secure Information Networks. Springer, Boston, MA, 1999: 258-272.","attrs":{}}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"[5] Delegated Proof of Stake https://github.com/dacplayproject/cpp-play/wiki/Delegated-Proof-of-Stake","attrs":{}}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章