真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

pbft的java代碼,pbft算法詳解

true是什么意思

字面意思就是真的,真實的,一般交流時候也理解為確定的,在代碼方法里面相當于ON的功能,表示狀態(tài)。

創(chuàng)新互聯(lián)建站堅實的技術研發(fā)基礎贏得了行業(yè)內(nèi)的良好口碑,公司成立10余年來,為上千企業(yè)提供過網(wǎng)站建設、軟件開發(fā)、搜索引擎優(yōu)化技術、互聯(lián)網(wǎng)大數(shù)據(jù)整合營銷服務,多年的技術服務成功經(jīng)驗、眾多的客戶使我們能懂得更多,做得更好。"讓您的網(wǎng)站跑起來"是我們一直追求的目標!

區(qū)塊鏈安全問題應該怎么解決?

區(qū)塊鏈項目(尤其是公有鏈)的一個特點是開源。通過開放源代碼,來提高項目的可信性,也使更多的人可以參與進來。但源代碼的開放也使得攻擊者對于區(qū)塊鏈系統(tǒng)的攻擊變得更加容易。近兩年就發(fā)生多起黑客攻擊事件,近日就有匿名幣Verge(XVG)再次遭到攻擊,攻擊者鎖定了XVG代碼中的某個漏洞,該漏洞允許惡意礦工在區(qū)塊上添加虛假的時間戳,隨后快速挖出新塊,短短的幾個小時內(nèi)謀取了近價值175萬美元的數(shù)字貨幣。雖然隨后攻擊就被成功制止,然而沒人能夠保證未來攻擊者是否會再次出擊。

當然,區(qū)塊鏈開發(fā)者們也可以采取一些措施

一是使用專業(yè)的代碼審計服務,

二是了解安全編碼規(guī)范,防患于未然。

密碼算法的安全性

隨著量子計算機的發(fā)展將會給現(xiàn)在使用的密碼體系帶來重大的安全威脅。區(qū)塊鏈主要依賴橢圓曲線公鑰加密算法生成數(shù)字簽名來安全地交易,目前最常用的ECDSA、RSA、DSA 等在理論上都不能承受量子攻擊,將會存在較大的風險,越來越多的研究人員開始關注能夠抵抗量子攻擊的密碼算法。

當然,除了改變算法,還有一個方法可以提升一定的安全性:

參考比特幣對于公鑰地址的處理方式,降低公鑰泄露所帶來的潛在的風險。作為用戶,尤其是比特幣用戶,每次交易后的余額都采用新的地址進行存儲,確保有比特幣資金存儲的地址的公鑰不外泄。

共識機制的安全性

當前的共識機制有工作量證明(Proof of Work,PoW)、權益證明(Proof of Stake,PoS)、授權權益證明(Delegated Proof of Stake,DPoS)、實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)等。

PoW 面臨51%攻擊問題。由于PoW 依賴于算力,當攻擊者具備算力優(yōu)勢時,找到新的區(qū)塊的概率將會大于其他節(jié)點,這時其具備了撤銷已經(jīng)發(fā)生的交易的能力。需要說明的是,即便在這種情況下,攻擊者也只能修改自己的交易而不能修改其他用戶的交易(攻擊者沒有其他用戶的私鑰)。

在PoS 中,攻擊者在持有超過51%的Token 量時才能夠攻擊成功,這相對于PoW 中的51%算力來說,更加困難。

在PBFT 中,惡意節(jié)點小于總節(jié)點的1/3 時系統(tǒng)是安全的??偟膩碚f,任何共識機制都有其成立的條件,作為攻擊者,還需要考慮的是,一旦攻擊成功,將會造成該系統(tǒng)的價值歸零,這時攻擊者除了破壞之外,并沒有得到其他有價值的回報。

對于區(qū)塊鏈項目的設計者而言,應該了解清楚各個共識機制的優(yōu)劣,從而選擇出合適的共識機制或者根據(jù)場景需要,設計新的共識機制。

智能合約的安全性

智能合約具備運行成本低、人為干預風險小等優(yōu)勢,但如果智能合約的設計存在問題,將有可能帶來較大的損失。2016 年6 月,以太坊最大眾籌項目The DAO 被攻擊,黑客獲得超過350 萬個以太幣,后來導致以太坊分叉為ETH 和ETC。

對此提出的措施有兩個方面:

一是對智能合約進行安全審計,

二是遵循智能合約安全開發(fā)原則。

智能合約的安全開發(fā)原則有:對可能的錯誤有所準備,確保代碼能夠正確的處理出現(xiàn)的bug 和漏洞;謹慎發(fā)布智能合約,做好功能測試與安全測試,充分考慮邊界;保持智能合約的簡潔;關注區(qū)塊鏈威脅情報,并及時檢查更新;清楚區(qū)塊鏈的特性,如謹慎調(diào)用外部合約等。

數(shù)字錢包的安全性

數(shù)字錢包主要存在三方面的安全隱患:第一,設計缺陷。2014 年底,某簽報因一個嚴重的隨機數(shù)問題(R 值重復)造成用戶丟失數(shù)百枚數(shù)字資產(chǎn)。第二,數(shù)字錢包中包含惡意代碼。第三,電腦、手機丟失或損壞導致的丟失資產(chǎn)。

應對措施主要有四個方面:

一是確保私鑰的隨機性;

二是在軟件安裝前進行散列值校驗,確保數(shù)字錢包軟件沒有被篡改過;

三是使用冷錢包;

四是對私鑰進行備份。

如何辯別真正的區(qū)塊鏈數(shù)字貨幣

某個數(shù)字貨幣是否是一個有價值的幣種,在目前基本屬于“天使輪”階段而言,判定標準有三個,一是團隊,二是經(jīng)濟模型,三是行業(yè)需求。

團隊的隨機性太大,在此不進行討論。本文首先對數(shù)字貨幣的經(jīng)濟模型進行一個詳盡地分析,在隨后的文章中,筆者會根據(jù)不同行業(yè)對部分數(shù)字貨幣進行剖析。

嚴格來講,本文所涉及的經(jīng)濟模型,并不完全等同于經(jīng)濟學中所述概念。特指在數(shù)字貨幣中,貨幣的共識機制與激勵機制。

一、共識機制

共識機制是區(qū)塊鏈系統(tǒng)中各個節(jié)點達成一致的策略和方法,應根據(jù)系統(tǒng)類型及應用場景的不同靈活選取。

常用的共識機制主要有PoW、PoS、DPoS、PBFT(及其變種)等。另外,基于區(qū)塊鏈技術的不同應用場景,以及各種共識機制的特性,本文按照以下維度來評價各種共識機制的技術水平:

a) 合規(guī)監(jiān)管:是否支持超級權限節(jié)點對全網(wǎng)節(jié)點、數(shù)據(jù)進行監(jiān)管;

b) 性能效率:交易達成共識被確認的效率;

c) 資源消耗:共識過程中耗費的CPU、網(wǎng)絡輸入輸出、存儲等計算機資源;

d) 容錯性:防攻擊、防欺詐的能力。

1、PoW(Proof of Work)工作量證明:依賴機器進行數(shù)學運算來獲取記賬權,資源消耗相比其他共識機制高、可監(jiān)管性弱,同時每次達成共識需要全網(wǎng)共同參與運算,性能效率比較低,容錯性方面允許全網(wǎng)50%節(jié)點出錯。

優(yōu)點:(1)安全性高,系統(tǒng)穩(wěn)定性好;(2)節(jié)點間無需交換額外的信息即可達成共識;(3)破壞系統(tǒng)需要投入極大的成本;(4)算法簡單,容易實現(xiàn)。

缺點:(1)需要投入硬件成本及能源成本;(2)區(qū)塊的確認時間較長,而且需要等待多個確認;(3)由于比特幣的先發(fā)優(yōu)勢,新的區(qū)塊鏈必須找到一種不同的散列算法,否則就會面臨比特幣的算力攻擊;(4)容易產(chǎn)生分叉。

2、PoS(Proof of Stake)權益證明:主要思想是節(jié)點記賬權的獲得難度與節(jié)點持有的權益成反比,相對于PoW,一定程度減少了數(shù)學運算帶來的資源消耗,性能也得到了相應的提升,但依然是基于哈希運算競爭獲取記賬權的方式,可監(jiān)管性弱。該共識機制容錯性和PoW相同。

優(yōu)點:(1)縮短了共識達成的時間;(2)不再需要大量消耗能源挖礦。

缺點:(1)還是需要挖礦,存在一定的資源浪費;(2)所有的確認都只是一個概率上的表達,而不是一個確定性的事情,理論上有可能存在其他攻擊影響。

3、DPoS (Delegate Proof of Stake) 股份授權證明:與PoS的主要區(qū)別在于節(jié)點選舉若干代理人,由代理人驗證和記賬。其合規(guī)監(jiān)管、性能、資源消耗和容錯性與PoS相似。

優(yōu)點:(1)通過使用“代議制”,大幅提高達成共識的時間,為商業(yè)應用的開發(fā)提供了客觀條件;(2)大幅度減少了資源消耗。

缺點:(1)存在“代表”作惡的情況,需要制定相應的約束條件及替代方案;(2)需要在總節(jié)點數(shù)量與“代表”數(shù)量之間做好平衡。

4、PBFT(Practical Byzantine Fault Tolerance)實用拜占庭容錯:一種采用許可投票、少數(shù)服從多數(shù)來選舉領導者進行記賬的共識機制,但該共識機制允許拜占庭容錯。該共識機制允許強監(jiān)管節(jié)點參與,具備權限分級能力,性能更高,耗能更低,該算法每輪記賬都會由全網(wǎng)節(jié)點共同選舉領導者,允許33%的節(jié)點作惡,容錯性為33%。

優(yōu)點:(1)系統(tǒng)運轉(zhuǎn)可以脫離幣的存在,PBFT算法共識各節(jié)點由業(yè)務的參與方或者監(jiān)管方組成,安全性與穩(wěn)定性由業(yè)務相關方保證;(2)共識的時延大約在2~5秒鐘,基本達到商用實時處理的要求;(3)共識效率高,可滿足高頻交易量的需求。

缺點:(1)當有1/3或以上記賬人停止工作后,系統(tǒng)將無法提供服務;(2)當有1/3或以上記賬人聯(lián)合作惡,且其它所有的記賬人被恰好分割為兩個網(wǎng)絡孤島時,惡意記賬人可以使系統(tǒng)出現(xiàn)分叉,但是會留下密碼學證據(jù)。

二、激勵機制

激勵機制與共識機制有強關聯(lián)性的,不夸張的說,在一定程度上,共識機制決定了激勵機制的設計方式,也就是說,共識機制是激勵機制的充分條件(規(guī)模極小的私有鏈除外)。就二者在區(qū)塊鏈系統(tǒng)內(nèi)的關系而言,共識機制的目的是產(chǎn)生區(qū)塊,而激勵機制則是給予區(qū)塊生產(chǎn)者的獎勵。

單就激勵機制而言,即數(shù)字貨幣如何發(fā)放。其中涉及到總量是否恒定,數(shù)字貨幣總量如何分配(投資人、團隊、礦工等),激活/解鎖/釋放/回購機制,數(shù)字貨幣權益等。

從二者關系看,數(shù)字貨幣分為兩種:一種是區(qū)塊鏈項目,擁有區(qū)塊鏈完整的架構,其經(jīng)濟模型由共識機制與激勵機制組成;另一種是部署于區(qū)塊鏈上的分布式應用所發(fā)行的數(shù)字貨幣,僅需要設計優(yōu)化后的激勵機制以維系整個應用的良性運轉(zhuǎn)即可。

2.1 區(qū)塊鏈項目的激勵機制

激勵機制的設計源于以比特幣為代表的區(qū)塊鏈1.0時代。

比特幣是一個完全開源的公鏈項目,沒有眾籌,沒有項目方,整個區(qū)塊鏈運行的關鍵在于三點:

第一是底層代碼的準確性(已經(jīng)經(jīng)過了時間的檢驗);

第二是共識算法,采用PoW機制,簡單易用,在前期運行比特幣系統(tǒng)過程中,并無過多的資源浪費,這為大量普通網(wǎng)絡節(jié)點接入比特幣系統(tǒng)提供了便捷,然而在專業(yè)的比特幣挖礦機器產(chǎn)生之后,難度系數(shù)增加,資源浪費在所難免,是為后話(中本聰可能低估了群體的智慧);

第三是,激勵機制的設計,基于開源的公鏈必須提供給網(wǎng)絡節(jié)點持續(xù)運行所必要的動力。比特幣約每十分鐘出一個區(qū)塊,前21萬個區(qū)塊,大概需要4年時間,第一個四年期每個區(qū)塊的激勵為:50個比特幣與該區(qū)塊內(nèi)所有的交易費用,隨后的每21萬個區(qū)塊,獎勵減半,在2140年比特幣區(qū)塊獎勵將完全由區(qū)塊中的交易費用構成。

幾個要素構成了比特幣的激勵機制:

(1)比特幣的發(fā)行總量為2100萬枚,不增發(fā);

(2)PoW共識機制決定了比特幣的分配方式為算力產(chǎn)生,100%分配給礦工;

(3 )約每十分鐘產(chǎn)生一個區(qū)塊,區(qū)塊初始獎勵為50個比特幣,每21萬個區(qū)塊之后產(chǎn)量減半,具有“通縮”屬性,無回購銷毀機制;

(4) 比特幣交易需要支付給礦工一定的數(shù)據(jù)打包費用。

以上是第一套區(qū)塊鏈的激勵機制:穩(wěn)定的數(shù)字貨幣供應,維持整個系統(tǒng)運轉(zhuǎn)的礦工團體及數(shù)字貨幣分配方式,數(shù)字貨幣釋放機制,數(shù)字貨幣交易方式。這也成為區(qū)塊鏈項目中激勵機制設計的基礎框架。

隨著比特幣知名度的上升,用戶群體日益擴大,資源浪費,效率偏低等問題逐漸凸顯,后續(xù)區(qū)塊鏈項目在激勵機制設計上開始進行改進。

比如為了減少資源消耗而采取的PoS共識算法,在此種算法下新“挖掘”出的數(shù)字貨幣為全員共享而非礦工獨享,客觀上打壓了礦工的積極性,從而采用了數(shù)字貨幣“通脹”的形式,即增發(fā)一定數(shù)量的數(shù)字貨幣,然而數(shù)字貨幣的增發(fā)必然會造成貶值,因此,需要將新增的一部分數(shù)字貨幣返還持幣者作以補償。

再比如為了提高效率而采取DPoS共識算法,設計機制與PoS類似,只不過將新增數(shù)字貨幣的分配方式從由代碼約定改為了由超級節(jié)點主觀分發(fā)。

總而言之,激勵機制的設計是不斷進化中的,但是仍然未擺脫經(jīng)典模式的基本框架。

2.2 分布式應用的激勵機制

分布式應用是指,部署與通用公有鏈或者行業(yè)公有鏈上的應用,如果把公鏈理解為操作系統(tǒng),那么分布式應用就是適配于這個系統(tǒng)的Applications。通常情況下,這些應用都會在所部署的公鏈上發(fā)行數(shù)字貨幣,暫且稱之為應用型數(shù)字貨幣。由于應用基于公鏈創(chuàng)建,所有特性受制于公鏈所能提供的功能。

應用型數(shù)字貨幣的經(jīng)濟模型中,不需要進行共識機制的設計,只需要設計健康的激勵機制即可。

比如,頭部數(shù)字貨幣交易所Binance發(fā)布了一種數(shù)字貨幣,簡稱“BNB”,它是基于以太坊區(qū)塊鏈的ERC20標準數(shù)字貨幣。

BNB總量被限定為2億個,并承諾永不增發(fā)。50%數(shù)字貨幣對外發(fā)售,40%團隊持有,早期的天使投資人持有10%。持有BNB的用戶,在Binance平臺上進行交易,可享受用足額BNB抵扣并享受5年內(nèi)手續(xù)費逐級遞減的折扣;除了享受手續(xù)費折扣外,持有BNB的用戶可以享受眾多的空投活動。在這些權益之外,BNB項目團隊會在每季度拿出當季凈利潤的20%用于回購BNB并銷毀,直至所有BNB總量為1億個為止,具備了“通縮”屬性。

應用型數(shù)字貨幣的經(jīng)濟模型大體如下:數(shù)字貨幣總量一般恒定;數(shù)字貨幣分配方式為:早期投資者與項目團隊持有一定比例的數(shù)字貨幣(約50%);持有數(shù)字貨幣享受該分布式應用的部分權益。

當然,在數(shù)字貨幣數(shù)量(是否增發(fā)需根據(jù)所部屬平臺和項目需求而定)、分配方式、比例和持幣權益方面都能依據(jù)項目需求進行調(diào)整。

三、如何設計數(shù)字貨幣的經(jīng)濟模型

在這里,應該明確一個理念,價值回歸。我們可以將它延伸理解為互聯(lián)網(wǎng)下的共享經(jīng)濟模式在區(qū)塊鏈領域的擴展。即區(qū)塊鏈項目的價值是由參與者共同創(chuàng)造的,應該由區(qū)塊鏈參與者共享。

那么如果要為一個區(qū)塊鏈項目或者分布式應用設計一個合理的經(jīng)濟模型,應該從哪些方面加以考慮呢?

3.1 共識機制的選用

對區(qū)塊鏈項目而言,經(jīng)濟模型的設計比較難,即便現(xiàn)有的幾大區(qū)塊鏈項目,其經(jīng)濟模型的設計也并非盡善盡美的。

在共識算法的選擇上,要參照符合監(jiān)管,利于性能效率提升,盡量避免過度的資源消耗,具有一定的容錯性四個方面加以考慮。

結(jié)合主流的共識算法如PoW、PoS、DPoS、PBFT(及其變種)等,其中DPoS、PBFT(及其變種)兩種算法在上述四方面能夠做到一個較好的平衡。目前國內(nèi)的區(qū)塊鏈項目多采用PBFT及其變種算法作為共識機制即是例證。

當然,隨著未來人類科技的不斷進步,更新的、更能夠得到有效監(jiān)管、效率更高的算法可能會逐漸被人發(fā)現(xiàn)并加以運用。

3.2 激勵機制的設計

激勵機制的重要性無需贅言。在確定采取何種共識機制之后,下一步就需要設計合理的激勵機制以保證區(qū)塊鏈項目的良好運轉(zhuǎn)和持續(xù)發(fā)展。

下面將從數(shù)字貨幣總量、分配方式、釋放/回購機制、持幣權益四個方面進行探討。

(1)數(shù)字貨幣總量供應

數(shù)字貨幣的總量依據(jù)所屬行業(yè)及項目需求而定,避免預期價格異常而導致與法幣兌換差額較大:例如,一個關于資產(chǎn)管理的區(qū)塊鏈項目,預期資產(chǎn)管理市值為50億美元,發(fā)行數(shù)字貨幣的數(shù)量應不少于50億枚為佳。

(2) 數(shù)字貨幣分配方式

這里的分配方式是指,在所發(fā)行數(shù)字貨幣的總數(shù)中,早期投資者、團隊、社區(qū)等分別持有的數(shù)量。

在當前市場中,為了維持價格的穩(wěn)定,防止游子惡意做空,促進區(qū)塊鏈項目生態(tài)健康,團隊持有一定比例的數(shù)字貨幣是十分必要的。

(3) 數(shù)字貨幣釋放/回購機制

在比特幣中即“挖礦”,在非PoW共識機制的區(qū)塊鏈項目中,數(shù)字貨幣的有三種形式釋放:一種是前期預售;第二種就是行為(包括但不限于:交易、運動、內(nèi)容生產(chǎn))釋放;最后一種為線性釋放,即固定周期內(nèi)釋放固定數(shù)量的數(shù)字貨幣,直至全部釋放完畢(三種方法也可同時使用)。

回購機制是項目方對持幣者的回饋措施之一,使用回購銷毀的方式對市值進行管理,對所有持幣者進行“分紅”。

(4) 數(shù)字貨幣權益

根據(jù)區(qū)塊鏈賦予不同的行業(yè)來看,一般具有交易、應用中消費、持幣享受平臺利潤分成(類似于持股)、空投等福利。

四、案例示范

項目名稱:X

代幣名稱:XT

核心產(chǎn)品:基于AI大數(shù)據(jù)的數(shù)字貨幣智能投顧平臺

1 行業(yè)背景

尋找行業(yè)痛點:資產(chǎn)管理需要專業(yè)的團隊與知識,然而現(xiàn)在大多數(shù)數(shù)字貨幣投資者并不具備;數(shù)字貨幣市場行情波動巨大,在行情下挫中,投資者無法對資產(chǎn)進行保值。

2 自身優(yōu)勢

在股票、期貨市場深耕多年,有成熟、高素質(zhì)資產(chǎn)管理團隊;AI大數(shù)據(jù)團隊技術實力強勁。

3 市場調(diào)研

進行市場調(diào)研之后,預估未來5年內(nèi),資產(chǎn)管理的市值約為10億美元。

4 數(shù)字貨幣總量

在考慮預期資產(chǎn)管理市值、開發(fā)周期與難度后,考慮發(fā)行基于以太坊ERC20數(shù)字貨幣XT,數(shù)量20億枚,永不增發(fā)。

5 分配方式

早期投資人持有10%,團隊持有20%,商務運營10%,社區(qū)建設10%,投資者持有50%。

6 數(shù)字貨幣釋放/回購機制

釋放機制分為三類:

第一類:商務運營持幣部分為全部解鎖,用途限定為商務及運營活動;

第二類:社區(qū)建設部分的釋放機制為,社區(qū)成員發(fā)布獨家資訊、合作平臺發(fā)布獨家項目進展等行為,根據(jù)參與ID數(shù),釋放相應比例XT(發(fā)布者與參與者各獲得50%),直至全部釋放完成(釋放完成之后,后續(xù)獎勵來源于平臺利潤池);

第三類:投資者持主流數(shù)字貨幣,在平臺中進行資產(chǎn)管理,根據(jù)兌換比例,釋放一定數(shù)量的XT,早期投資人與團隊持有部分同步,按比例解鎖;

回購機制為:所得利潤(以XT計)的50%返還給持幣者;剩余進入平臺利潤池中,按月對利潤池中的50%的XT進行銷毀,直至XT總量為10億枚;其余作為平臺生態(tài)建設基金;

7 數(shù)字貨幣權益

利潤分成:持有XT,是為平臺用戶,可以享受平臺利潤50%的分成;

平臺治理:參與平臺活動享受XT獎勵、其他項目方的空投活動;

功能定制:可基于平臺AI大數(shù)據(jù),投資者可購買針對個人交易策略進行優(yōu)化的服務

共識算法系列之一:私鏈的raft算法和聯(lián)盟鏈的 pbft 算法

對數(shù)據(jù)順序達成一致共識是很多共識算法要解決的本質(zhì)問題

Fabic的pbft算法實現(xiàn)

現(xiàn)階段的共識算法主要可以分成三大類:公鏈,聯(lián)盟鏈和私鏈

私鏈,所有節(jié)點可信

聯(lián)盟鏈,存在對等的不信任節(jié)點

私鏈:私鏈的共識算法即區(qū)塊鏈這個概念還沒普及時的傳統(tǒng)分布式系統(tǒng)里的共識算法,比如 zookeeper 的 zab 協(xié)議,就是類 paxos 算法的一種。私鏈的適用環(huán)境一般是不考慮集群中存在作惡節(jié)點,只考慮因為系統(tǒng)或者網(wǎng)絡原因?qū)е碌墓收瞎?jié)點。

聯(lián)盟鏈:聯(lián)盟鏈中,經(jīng)典的代表項目是 Hyperledger 組織下的 Fabric 項目, Fabric0.6 版本使用的就是 pbft 算法。聯(lián)盟鏈的適用環(huán)境除了需要考慮集群中存在故障節(jié)點,還需要考慮集群中存在作惡節(jié)點。對于聯(lián)盟鏈,每個新加入的節(jié)點都是需要驗證和審核的。

公鏈:公鏈不僅需要考慮網(wǎng)絡中存在故障節(jié)點,還需要考慮作惡節(jié)點,這一點和聯(lián)盟鏈是類似的。和聯(lián)盟鏈最大的區(qū)別就是,公鏈中的節(jié)點可以很自由的加入或者退出,不需要嚴格的驗證和審核。

在公有鏈中用的最多的是pow算法和pos算法,這些算法都是參與者的利益直接相關,通過利益來制約節(jié)點誠實的工作,解決分布式系統(tǒng)中的拜占庭問題。拜占庭容錯算法是一種狀態(tài)機副本復制算法,通過節(jié)點間的多輪消息傳遞,網(wǎng)絡內(nèi)的所有誠實節(jié)點就可以達成一致的共識。

使用拜占庭容錯算法不需要發(fā)行加密貨幣,但是只能用于私有鏈或者聯(lián)盟鏈,需要對節(jié)點的加入進行權限控制;不能用于公有鏈,因為公有鏈中所有節(jié)點都可以隨意加入退出,無法抵擋女巫攻擊(sybil attack)

raft 算法包含三種角色,分別是:跟隨者( follower ),候選人(candidate )和領導者( leader )。集群中的一個節(jié)點在某一時刻只能是這三種狀態(tài)的其中一種,這三種角色是可以隨著時間和條件的變化而互相轉(zhuǎn)換的。

raft 算法主要有兩個過程:一個過程是領導者選舉,另一個過程是日志復制,其中日志復制過程會分記錄日志和提交數(shù)據(jù)兩個階段。raft 算法支持最大的容錯故障節(jié)點是(N-1)/2,其中 N 為 集群中總的節(jié)點數(shù)量。

國外有一個動畫介紹raft算法介紹的很透徹,鏈接地址為: 。這個動畫主要包含三部分內(nèi)容,第一部分介紹簡單版的領導者選舉和日志復制的過程,第二部分內(nèi)容介紹詳細版的領導者選舉和日志復制的過程,第三部分內(nèi)容介紹的是如果遇到網(wǎng)絡分區(qū)(腦裂),raft 算法是如何恢復網(wǎng)絡一致的。

pbft 算法的提出主要是為了解決拜占庭將軍問題

要讓這個問題有解,有一個 十分重要的前提 ,那就是 信道必須是可靠的 。如果信道不能保證可靠,那么拜占庭問題無解。關于信道可靠問題,會引出兩軍問題。兩軍問題的結(jié)論是,在一個不可靠的通信鏈路上試圖通過通信以達成一致是基本不可能或者十分困難的。

拜占庭將軍問題最早是由 Leslie Lamport 與另外兩人在 1982 年發(fā)表的論文《The Byzantine Generals Problem 》提出的, 他證明了在將軍總數(shù)大于 3f ,背叛者為f 或者更少時,忠誠的將軍可以達成命令上的一致,即 3f+1=n 。算法復雜度為 o(n^(f+1)) 。而 Miguel Castro (卡斯特羅)和 Barbara Liskov (利斯科夫)在1999年發(fā)表的論文《 Practical Byzantine Fault Tolerance 》中首次提出 pbft 算法,該算法容錯數(shù)量也滿足 3f+1=n ,算法復雜度為 o(n^2)。

首先我們先來思考一個問題,為什么 pbft 算法的最大容錯節(jié)點數(shù)量是(n-1)/3,而 raft 算法的最大容錯節(jié)點數(shù)量是(n-1)/2 ?

對于raft算法,raft算法的的容錯只支持容錯故障節(jié)點,不支持容錯作惡節(jié)點。什么是故障節(jié)點呢?就是節(jié)點因為系統(tǒng)繁忙、宕機或者網(wǎng)絡問題等其它異常情況導致的無響應,出現(xiàn)這種情況的節(jié)點就是故障節(jié)點。那什么是作惡節(jié)點呢?作惡節(jié)點除了可以故意對集群的其它節(jié)點的請求無響應之外,還可以故意發(fā)送錯誤的數(shù)據(jù),或者給不同的其它節(jié)點發(fā)送不同的數(shù)據(jù),使整個集群的節(jié)點最終無法達成共識,這種節(jié)點就是作惡節(jié)點。

raft 算法只支持容錯故障節(jié)點,假設集群總節(jié)點數(shù)為n,故障節(jié)點為 f ,根據(jù)小數(shù)服從多數(shù)的原則,集群里正常節(jié)點只需要比 f 個節(jié)點再多一個節(jié)點,即 f+1 個節(jié)點,正確節(jié)點的數(shù)量就會比故障節(jié)點數(shù)量多,那么集群就能達成共識。因此 raft 算法支持的最大容錯節(jié)點數(shù)量是(n-1)/2。

對于 pbft 算法,因為 pbft 算法的除了需要支持容錯故障節(jié)點之外,還需要支持容錯作惡節(jié)點。假設集群節(jié)點數(shù)為 N,有問題的節(jié)點為 f。有問題的節(jié)點中,可以既是故障節(jié)點,也可以是作惡節(jié)點,或者只是故障節(jié)點或者只是作惡節(jié)點。那么會產(chǎn)生以下兩種極端情況:

第一種情況,f 個有問題節(jié)點既是故障節(jié)點,又是作惡節(jié)點,那么根據(jù)小數(shù)服從多數(shù)的原則,集群里正常節(jié)點只需要比f個節(jié)點再多一個節(jié)點,即 f+1 個節(jié)點,確節(jié)點的數(shù)量就會比故障節(jié)點數(shù)量多,那么集群就能達成共識。也就是說這種情況支持的最大容錯節(jié)點數(shù)量是 (n-1)/2。

第二種情況,故障節(jié)點和作惡節(jié)點都是不同的節(jié)點。那么就會有 f 個問題節(jié)點和 f 個故障節(jié)點,當發(fā)現(xiàn)節(jié)點是問題節(jié)點后,會被集群排除在外,剩下 f 個故障節(jié)點,那么根據(jù)小數(shù)服從多數(shù)的原則,集群里正常節(jié)點只需要比f個節(jié)點再多一個節(jié)點,即 f+1 個節(jié)點,確節(jié)點的數(shù)量就會比故障節(jié)點數(shù)量多,那么集群就能達成共識。所以,所有類型的節(jié)點數(shù)量加起來就是 f+1 個正確節(jié)點,f個故障節(jié)點和f個問題節(jié)點,即 3f+1=n。

結(jié)合上述兩種情況,因此 pbft 算法支持的最大容錯節(jié)點數(shù)量是(n-1)/3

pbft 算法的基本流程主要有以下四步:

客戶端發(fā)送請求給主節(jié)點

主節(jié)點廣播請求給其它節(jié)點,節(jié)點執(zhí)行 pbft 算法的三階段共識流程。

節(jié)點處理完三階段流程后,返回消息給客戶端。

客戶端收到來自 f+1 個節(jié)點的相同消息后,代表共識已經(jīng)正確完成。

為什么收到 f+1 個節(jié)點的相同消息后就代表共識已經(jīng)正確完成?從上一小節(jié)的推導里可知,無論是最好的情況還是最壞的情況,如果客戶端收到 f+1 個節(jié)點的相同消息,那么就代表有足夠多的正確節(jié)點已全部達成共識并處理完畢了。

3.算法核心三階段流程

算法的核心三個階段分別是 pre-prepare 階段(預準備階段),prepare 階段(準備階段), commit 階段(提交階段)

流程的對比上,對于 leader 選舉這塊, raft 算法本質(zhì)是誰快誰當選,而 pbft 算法是按編號依次輪流做主節(jié)點。對于共識過程和重選 leader 機制這塊,為了更形象的描述這兩個算法,接下來會把 raft 和 pbft 的共識過程比喻成一個團隊是如何執(zhí)行命令的過程,從這個角度去理解 raft 算法和 pbft 的區(qū)別。

一個團隊一定會有一個老大和普通成員。對于 raft 算法,共識過程就是:只要老大還沒掛,老大說什么,我們(團隊普通成員)就做什么,堅決執(zhí)行。那什么時候重新老大呢?只有當老大掛了才重選老大,不然生是老大的人,死是老大的鬼。

對于 pbft 算法,共識過程就是:老大向我發(fā)送命令時,當我認為老大的命令是有問題時,我會拒絕執(zhí)行。就算我認為老大的命令是對的,我還會問下團隊的其它成員老大的命令是否是對的,只有大多數(shù)人 (2f+1) 都認為老大的命令是對的時候,我才會去執(zhí)行命令。那什么時候重選老大呢?老大掛了當然要重選,如果大多數(shù)人都認為老大不稱職或者有問題時,我們也會重新選擇老大。

四、結(jié)語

raft 算法和 pbft 算法是私鏈和聯(lián)盟鏈中經(jīng)典的共識算法,本文主要介紹了 raft 和 pbft 算法的流程和區(qū)別。 raft 和 pbft 算法有兩點根本區(qū)別:

raft 算法從節(jié)點不會拒絕主節(jié)點的請求,而 pbft 算法從節(jié)點在某些情況下會拒絕主節(jié)點的請求 ;

raft 算法只能容錯故障節(jié)點,并且最大容錯節(jié)點數(shù)為 (n-1)/2 ,而 pbft 算法能容錯故障節(jié)點和作惡節(jié)點,最大容錯節(jié)點數(shù)為 (n-1)/3 。

pbft算法是通過投票來達成共識,可以很好的解決包括分叉等問題的同時提升效率。但僅僅比較適合于聯(lián)盟鏈私有鏈,因為兩兩節(jié)點之間通信量是O(n^2)(通過優(yōu)化可以減少通信量),一般來說不能應用于超過100個節(jié)點。

pbft有解的前提是 信道必須是可靠的 ,存在的問題是 可擴展性(scalability)差

部分來自:

區(qū)塊鏈在設計上就是為了BFT


分享題目:pbft的java代碼,pbft算法詳解
本文網(wǎng)址:http://weahome.cn/article/hdpjig.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部