區(qū)塊鏈項目(尤其是公有鏈)的一個特點是開源。通過開放源代碼,來提高項目的可信性,也使更多的人可以參與進(jìn)來。但源代碼的開放也使得攻擊者對于區(qū)塊鏈系統(tǒng)的攻擊變得更加容易。近兩年就發(fā)生多起黑客攻擊事件,近日就有匿名幣Verge(XVG)再次遭到攻擊,攻擊者鎖定了XVG代碼中的某個漏洞,該漏洞允許惡意礦工在區(qū)塊上添加虛假的時間戳,隨后快速挖出新塊,短短的幾個小時內(nèi)謀取了近價值175萬美元的數(shù)字貨幣。雖然隨后攻擊就被成功制止,然而沒人能夠保證未來攻擊者是否會再次出擊。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),蘭坪企業(yè)網(wǎng)站建設(shè),蘭坪品牌網(wǎng)站建設(shè),網(wǎng)站定制,蘭坪網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,蘭坪網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
當(dāng)然,區(qū)塊鏈開發(fā)者們也可以采取一些措施
一是使用專業(yè)的代碼審計服務(wù),
二是了解安全編碼規(guī)范,防患于未然。
密碼算法的安全性
隨著量子計算機的發(fā)展將會給現(xiàn)在使用的密碼體系帶來重大的安全威脅。區(qū)塊鏈主要依賴橢圓曲線公鑰加密算法生成數(shù)字簽名來安全地交易,目前最常用的ECDSA、RSA、DSA 等在理論上都不能承受量子攻擊,將會存在較大的風(fēng)險,越來越多的研究人員開始關(guān)注能夠抵抗量子攻擊的密碼算法。
當(dāng)然,除了改變算法,還有一個方法可以提升一定的安全性:
參考比特幣對于公鑰地址的處理方式,降低公鑰泄露所帶來的潛在的風(fēng)險。作為用戶,尤其是比特幣用戶,每次交易后的余額都采用新的地址進(jìn)行存儲,確保有比特幣資金存儲的地址的公鑰不外泄。
共識機制的安全性
當(dāng)前的共識機制有工作量證明(Proof of Work,PoW)、權(quán)益證明(Proof of Stake,PoS)、授權(quán)權(quán)益證明(Delegated Proof of Stake,DPoS)、實用拜占庭容錯(Practical Byzantine Fault Tolerance,PBFT)等。
PoW 面臨51%攻擊問題。由于PoW 依賴于算力,當(dāng)攻擊者具備算力優(yōu)勢時,找到新的區(qū)塊的概率將會大于其他節(jié)點,這時其具備了撤銷已經(jīng)發(fā)生的交易的能力。需要說明的是,即便在這種情況下,攻擊者也只能修改自己的交易而不能修改其他用戶的交易(攻擊者沒有其他用戶的私鑰)。
在PoS 中,攻擊者在持有超過51%的Token 量時才能夠攻擊成功,這相對于PoW 中的51%算力來說,更加困難。
在PBFT 中,惡意節(jié)點小于總節(jié)點的1/3 時系統(tǒng)是安全的??偟膩碚f,任何共識機制都有其成立的條件,作為攻擊者,還需要考慮的是,一旦攻擊成功,將會造成該系統(tǒng)的價值歸零,這時攻擊者除了破壞之外,并沒有得到其他有價值的回報。
對于區(qū)塊鏈項目的設(shè)計者而言,應(yīng)該了解清楚各個共識機制的優(yōu)劣,從而選擇出合適的共識機制或者根據(jù)場景需要,設(shè)計新的共識機制。
智能合約的安全性
智能合約具備運行成本低、人為干預(yù)風(fēng)險小等優(yōu)勢,但如果智能合約的設(shè)計存在問題,將有可能帶來較大的損失。2016 年6 月,以太坊最大眾籌項目The DAO 被攻擊,黑客獲得超過350 萬個以太幣,后來導(dǎo)致以太坊分叉為ETH 和ETC。
對此提出的措施有兩個方面:
一是對智能合約進(jìn)行安全審計,
二是遵循智能合約安全開發(fā)原則。
智能合約的安全開發(fā)原則有:對可能的錯誤有所準(zhǔn)備,確保代碼能夠正確的處理出現(xiàn)的bug 和漏洞;謹(jǐn)慎發(fā)布智能合約,做好功能測試與安全測試,充分考慮邊界;保持智能合約的簡潔;關(guān)注區(qū)塊鏈威脅情報,并及時檢查更新;清楚區(qū)塊鏈的特性,如謹(jǐn)慎調(diào)用外部合約等。
數(shù)字錢包的安全性
數(shù)字錢包主要存在三方面的安全隱患:第一,設(shè)計缺陷。2014 年底,某簽報因一個嚴(yán)重的隨機數(shù)問題(R 值重復(fù))造成用戶丟失數(shù)百枚數(shù)字資產(chǎn)。第二,數(shù)字錢包中包含惡意代碼。第三,電腦、手機丟失或損壞導(dǎo)致的丟失資產(chǎn)。
應(yīng)對措施主要有四個方面:
一是確保私鑰的隨機性;
二是在軟件安裝前進(jìn)行散列值校驗,確保數(shù)字錢包軟件沒有被篡改過;
三是使用冷錢包;
四是對私鑰進(jìn)行備份。
某個數(shù)字貨幣是否是一個有價值的幣種,在目前基本屬于“天使輪”階段而言,判定標(biāo)準(zhǔn)有三個,一是團(tuán)隊,二是經(jīng)濟(jì)模型,三是行業(yè)需求。
團(tuán)隊的隨機性太大,在此不進(jìn)行討論。本文首先對數(shù)字貨幣的經(jīng)濟(jì)模型進(jìn)行一個詳盡地分析,在隨后的文章中,筆者會根據(jù)不同行業(yè)對部分?jǐn)?shù)字貨幣進(jìn)行剖析。
嚴(yán)格來講,本文所涉及的經(jīng)濟(jì)模型,并不完全等同于經(jīng)濟(jì)學(xué)中所述概念。特指在數(shù)字貨幣中,貨幣的共識機制與激勵機制。
一、共識機制
共識機制是區(qū)塊鏈系統(tǒng)中各個節(jié)點達(dá)成一致的策略和方法,應(yīng)根據(jù)系統(tǒng)類型及應(yīng)用場景的不同靈活選取。
常用的共識機制主要有PoW、PoS、DPoS、PBFT(及其變種)等。另外,基于區(qū)塊鏈技術(shù)的不同應(yīng)用場景,以及各種共識機制的特性,本文按照以下維度來評價各種共識機制的技術(shù)水平:
a) 合規(guī)監(jiān)管:是否支持超級權(quán)限節(jié)點對全網(wǎng)節(jié)點、數(shù)據(jù)進(jìn)行監(jiān)管;
b) 性能效率:交易達(dá)成共識被確認(rèn)的效率;
c) 資源消耗:共識過程中耗費的CPU、網(wǎng)絡(luò)輸入輸出、存儲等計算機資源;
d) 容錯性:防攻擊、防欺詐的能力。
1、PoW(Proof of Work)工作量證明:依賴機器進(jìn)行數(shù)學(xué)運算來獲取記賬權(quán),資源消耗相比其他共識機制高、可監(jiān)管性弱,同時每次達(dá)成共識需要全網(wǎng)共同參與運算,性能效率比較低,容錯性方面允許全網(wǎng)50%節(jié)點出錯。
優(yōu)點:(1)安全性高,系統(tǒng)穩(wěn)定性好;(2)節(jié)點間無需交換額外的信息即可達(dá)成共識;(3)破壞系統(tǒng)需要投入極大的成本;(4)算法簡單,容易實現(xiàn)。
缺點:(1)需要投入硬件成本及能源成本;(2)區(qū)塊的確認(rèn)時間較長,而且需要等待多個確認(rèn);(3)由于比特幣的先發(fā)優(yōu)勢,新的區(qū)塊鏈必須找到一種不同的散列算法,否則就會面臨比特幣的算力攻擊;(4)容易產(chǎn)生分叉。
2、PoS(Proof of Stake)權(quán)益證明:主要思想是節(jié)點記賬權(quán)的獲得難度與節(jié)點持有的權(quán)益成反比,相對于PoW,一定程度減少了數(shù)學(xué)運算帶來的資源消耗,性能也得到了相應(yīng)的提升,但依然是基于哈希運算競爭獲取記賬權(quán)的方式,可監(jiān)管性弱。該共識機制容錯性和PoW相同。
優(yōu)點:(1)縮短了共識達(dá)成的時間;(2)不再需要大量消耗能源挖礦。
缺點:(1)還是需要挖礦,存在一定的資源浪費;(2)所有的確認(rèn)都只是一個概率上的表達(dá),而不是一個確定性的事情,理論上有可能存在其他攻擊影響。
3、DPoS (Delegate Proof of Stake) 股份授權(quán)證明:與PoS的主要區(qū)別在于節(jié)點選舉若干代理人,由代理人驗證和記賬。其合規(guī)監(jiān)管、性能、資源消耗和容錯性與PoS相似。
優(yōu)點:(1)通過使用“代議制”,大幅提高達(dá)成共識的時間,為商業(yè)應(yīng)用的開發(fā)提供了客觀條件;(2)大幅度減少了資源消耗。
缺點:(1)存在“代表”作惡的情況,需要制定相應(yīng)的約束條件及替代方案;(2)需要在總節(jié)點數(shù)量與“代表”數(shù)量之間做好平衡。
4、PBFT(Practical Byzantine Fault Tolerance)實用拜占庭容錯:一種采用許可投票、少數(shù)服從多數(shù)來選舉領(lǐng)導(dǎo)者進(jìn)行記賬的共識機制,但該共識機制允許拜占庭容錯。該共識機制允許強監(jiān)管節(jié)點參與,具備權(quán)限分級能力,性能更高,耗能更低,該算法每輪記賬都會由全網(wǎng)節(jié)點共同選舉領(lǐng)導(dǎo)者,允許33%的節(jié)點作惡,容錯性為33%。
優(yōu)點:(1)系統(tǒng)運轉(zhuǎn)可以脫離幣的存在,PBFT算法共識各節(jié)點由業(yè)務(wù)的參與方或者監(jiān)管方組成,安全性與穩(wěn)定性由業(yè)務(wù)相關(guān)方保證;(2)共識的時延大約在2~5秒鐘,基本達(dá)到商用實時處理的要求;(3)共識效率高,可滿足高頻交易量的需求。
缺點:(1)當(dāng)有1/3或以上記賬人停止工作后,系統(tǒng)將無法提供服務(wù);(2)當(dāng)有1/3或以上記賬人聯(lián)合作惡,且其它所有的記賬人被恰好分割為兩個網(wǎng)絡(luò)孤島時,惡意記賬人可以使系統(tǒng)出現(xiàn)分叉,但是會留下密碼學(xué)證據(jù)。
二、激勵機制
激勵機制與共識機制有強關(guān)聯(lián)性的,不夸張的說,在一定程度上,共識機制決定了激勵機制的設(shè)計方式,也就是說,共識機制是激勵機制的充分條件(規(guī)模極小的私有鏈除外)。就二者在區(qū)塊鏈系統(tǒng)內(nèi)的關(guān)系而言,共識機制的目的是產(chǎn)生區(qū)塊,而激勵機制則是給予區(qū)塊生產(chǎn)者的獎勵。
單就激勵機制而言,即數(shù)字貨幣如何發(fā)放。其中涉及到總量是否恒定,數(shù)字貨幣總量如何分配(投資人、團(tuán)隊、礦工等),激活/解鎖/釋放/回購機制,數(shù)字貨幣權(quán)益等。
從二者關(guān)系看,數(shù)字貨幣分為兩種:一種是區(qū)塊鏈項目,擁有區(qū)塊鏈完整的架構(gòu),其經(jīng)濟(jì)模型由共識機制與激勵機制組成;另一種是部署于區(qū)塊鏈上的分布式應(yīng)用所發(fā)行的數(shù)字貨幣,僅需要設(shè)計優(yōu)化后的激勵機制以維系整個應(yīng)用的良性運轉(zhuǎn)即可。
2.1 區(qū)塊鏈項目的激勵機制
激勵機制的設(shè)計源于以比特幣為代表的區(qū)塊鏈1.0時代。
比特幣是一個完全開源的公鏈項目,沒有眾籌,沒有項目方,整個區(qū)塊鏈運行的關(guān)鍵在于三點:
第一是底層代碼的準(zhǔn)確性(已經(jīng)經(jīng)過了時間的檢驗);
第二是共識算法,采用PoW機制,簡單易用,在前期運行比特幣系統(tǒng)過程中,并無過多的資源浪費,這為大量普通網(wǎng)絡(luò)節(jié)點接入比特幣系統(tǒng)提供了便捷,然而在專業(yè)的比特幣挖礦機器產(chǎn)生之后,難度系數(shù)增加,資源浪費在所難免,是為后話(中本聰可能低估了群體的智慧);
第三是,激勵機制的設(shè)計,基于開源的公鏈必須提供給網(wǎng)絡(luò)節(jié)點持續(xù)運行所必要的動力。比特幣約每十分鐘出一個區(qū)塊,前21萬個區(qū)塊,大概需要4年時間,第一個四年期每個區(qū)塊的激勵為:50個比特幣與該區(qū)塊內(nèi)所有的交易費用,隨后的每21萬個區(qū)塊,獎勵減半,在2140年比特幣區(qū)塊獎勵將完全由區(qū)塊中的交易費用構(gòu)成。
幾個要素構(gòu)成了比特幣的激勵機制:
(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ù)字貨幣供應(yīng),維持整個系統(tǒng)運轉(zhuǎn)的礦工團(tuán)體及數(shù)字貨幣分配方式,數(shù)字貨幣釋放機制,數(shù)字貨幣交易方式。這也成為區(qū)塊鏈項目中激勵機制設(shè)計的基礎(chǔ)框架。
隨著比特幣知名度的上升,用戶群體日益擴(kuò)大,資源浪費,效率偏低等問題逐漸凸顯,后續(xù)區(qū)塊鏈項目在激勵機制設(shè)計上開始進(jìn)行改進(jìn)。
比如為了減少資源消耗而采取的PoS共識算法,在此種算法下新“挖掘”出的數(shù)字貨幣為全員共享而非礦工獨享,客觀上打壓了礦工的積極性,從而采用了數(shù)字貨幣“通脹”的形式,即增發(fā)一定數(shù)量的數(shù)字貨幣,然而數(shù)字貨幣的增發(fā)必然會造成貶值,因此,需要將新增的一部分?jǐn)?shù)字貨幣返還持幣者作以補償。
再比如為了提高效率而采取DPoS共識算法,設(shè)計機制與PoS類似,只不過將新增數(shù)字貨幣的分配方式從由代碼約定改為了由超級節(jié)點主觀分發(fā)。
總而言之,激勵機制的設(shè)計是不斷進(jìn)化中的,但是仍然未擺脫經(jīng)典模式的基本框架。
2.2 分布式應(yīng)用的激勵機制
分布式應(yīng)用是指,部署與通用公有鏈或者行業(yè)公有鏈上的應(yīng)用,如果把公鏈理解為操作系統(tǒng),那么分布式應(yīng)用就是適配于這個系統(tǒng)的Applications。通常情況下,這些應(yīng)用都會在所部署的公鏈上發(fā)行數(shù)字貨幣,暫且稱之為應(yīng)用型數(shù)字貨幣。由于應(yīng)用基于公鏈創(chuàng)建,所有特性受制于公鏈所能提供的功能。
應(yīng)用型數(shù)字貨幣的經(jīng)濟(jì)模型中,不需要進(jìn)行共識機制的設(shè)計,只需要設(shè)計健康的激勵機制即可。
比如,頭部數(shù)字貨幣交易所Binance發(fā)布了一種數(shù)字貨幣,簡稱“BNB”,它是基于以太坊區(qū)塊鏈的ERC20標(biāo)準(zhǔn)數(shù)字貨幣。
BNB總量被限定為2億個,并承諾永不增發(fā)。50%數(shù)字貨幣對外發(fā)售,40%團(tuán)隊持有,早期的天使投資人持有10%。持有BNB的用戶,在Binance平臺上進(jìn)行交易,可享受用足額BNB抵扣并享受5年內(nèi)手續(xù)費逐級遞減的折扣;除了享受手續(xù)費折扣外,持有BNB的用戶可以享受眾多的空投活動。在這些權(quán)益之外,BNB項目團(tuán)隊會在每季度拿出當(dāng)季凈利潤的20%用于回購BNB并銷毀,直至所有BNB總量為1億個為止,具備了“通縮”屬性。
應(yīng)用型數(shù)字貨幣的經(jīng)濟(jì)模型大體如下:數(shù)字貨幣總量一般恒定;數(shù)字貨幣分配方式為:早期投資者與項目團(tuán)隊持有一定比例的數(shù)字貨幣(約50%);持有數(shù)字貨幣享受該分布式應(yīng)用的部分權(quán)益。
當(dāng)然,在數(shù)字貨幣數(shù)量(是否增發(fā)需根據(jù)所部屬平臺和項目需求而定)、分配方式、比例和持幣權(quán)益方面都能依據(jù)項目需求進(jìn)行調(diào)整。
三、如何設(shè)計數(shù)字貨幣的經(jīng)濟(jì)模型
在這里,應(yīng)該明確一個理念,價值回歸。我們可以將它延伸理解為互聯(lián)網(wǎng)下的共享經(jīng)濟(jì)模式在區(qū)塊鏈領(lǐng)域的擴(kuò)展。即區(qū)塊鏈項目的價值是由參與者共同創(chuàng)造的,應(yīng)該由區(qū)塊鏈參與者共享。
那么如果要為一個區(qū)塊鏈項目或者分布式應(yīng)用設(shè)計一個合理的經(jīng)濟(jì)模型,應(yīng)該從哪些方面加以考慮呢?
3.1 共識機制的選用
對區(qū)塊鏈項目而言,經(jīng)濟(jì)模型的設(shè)計比較難,即便現(xiàn)有的幾大區(qū)塊鏈項目,其經(jīng)濟(jì)模型的設(shè)計也并非盡善盡美的。
在共識算法的選擇上,要參照符合監(jiān)管,利于性能效率提升,盡量避免過度的資源消耗,具有一定的容錯性四個方面加以考慮。
結(jié)合主流的共識算法如PoW、PoS、DPoS、PBFT(及其變種)等,其中DPoS、PBFT(及其變種)兩種算法在上述四方面能夠做到一個較好的平衡。目前國內(nèi)的區(qū)塊鏈項目多采用PBFT及其變種算法作為共識機制即是例證。
當(dāng)然,隨著未來人類科技的不斷進(jìn)步,更新的、更能夠得到有效監(jiān)管、效率更高的算法可能會逐漸被人發(fā)現(xiàn)并加以運用。
3.2 激勵機制的設(shè)計
激勵機制的重要性無需贅言。在確定采取何種共識機制之后,下一步就需要設(shè)計合理的激勵機制以保證區(qū)塊鏈項目的良好運轉(zhuǎn)和持續(xù)發(fā)展。
下面將從數(shù)字貨幣總量、分配方式、釋放/回購機制、持幣權(quán)益四個方面進(jìn)行探討。
(1)數(shù)字貨幣總量供應(yīng)
數(shù)字貨幣的總量依據(jù)所屬行業(yè)及項目需求而定,避免預(yù)期價格異常而導(dǎo)致與法幣兌換差額較大:例如,一個關(guān)于資產(chǎn)管理的區(qū)塊鏈項目,預(yù)期資產(chǎn)管理市值為50億美元,發(fā)行數(shù)字貨幣的數(shù)量應(yīng)不少于50億枚為佳。
(2) 數(shù)字貨幣分配方式
這里的分配方式是指,在所發(fā)行數(shù)字貨幣的總數(shù)中,早期投資者、團(tuán)隊、社區(qū)等分別持有的數(shù)量。
在當(dāng)前市場中,為了維持價格的穩(wěn)定,防止游子惡意做空,促進(jìn)區(qū)塊鏈項目生態(tài)健康,團(tuán)隊持有一定比例的數(shù)字貨幣是十分必要的。
(3) 數(shù)字貨幣釋放/回購機制
在比特幣中即“挖礦”,在非PoW共識機制的區(qū)塊鏈項目中,數(shù)字貨幣的有三種形式釋放:一種是前期預(yù)售;第二種就是行為(包括但不限于:交易、運動、內(nèi)容生產(chǎn))釋放;最后一種為線性釋放,即固定周期內(nèi)釋放固定數(shù)量的數(shù)字貨幣,直至全部釋放完畢(三種方法也可同時使用)。
回購機制是項目方對持幣者的回饋措施之一,使用回購銷毀的方式對市值進(jìn)行管理,對所有持幣者進(jìn)行“分紅”。
(4) 數(shù)字貨幣權(quán)益
根據(jù)區(qū)塊鏈賦予不同的行業(yè)來看,一般具有交易、應(yīng)用中消費、持幣享受平臺利潤分成(類似于持股)、空投等福利。
四、案例示范
項目名稱:X
代幣名稱:XT
核心產(chǎn)品:基于AI大數(shù)據(jù)的數(shù)字貨幣智能投顧平臺
1 行業(yè)背景
尋找行業(yè)痛點:資產(chǎn)管理需要專業(yè)的團(tuán)隊與知識,然而現(xiàn)在大多數(shù)數(shù)字貨幣投資者并不具備;數(shù)字貨幣市場行情波動巨大,在行情下挫中,投資者無法對資產(chǎn)進(jìn)行保值。
2 自身優(yōu)勢
在股票、期貨市場深耕多年,有成熟、高素質(zhì)資產(chǎn)管理團(tuán)隊;AI大數(shù)據(jù)團(tuán)隊技術(shù)實力強勁。
3 市場調(diào)研
進(jìn)行市場調(diào)研之后,預(yù)估未來5年內(nèi),資產(chǎn)管理的市值約為10億美元。
4 數(shù)字貨幣總量
在考慮預(yù)期資產(chǎn)管理市值、開發(fā)周期與難度后,考慮發(fā)行基于以太坊ERC20數(shù)字貨幣XT,數(shù)量20億枚,永不增發(fā)。
5 分配方式
早期投資人持有10%,團(tuán)隊持有20%,商務(wù)運營10%,社區(qū)建設(shè)10%,投資者持有50%。
6 數(shù)字貨幣釋放/回購機制
釋放機制分為三類:
第一類:商務(wù)運營持幣部分為全部解鎖,用途限定為商務(wù)及運營活動;
第二類:社區(qū)建設(shè)部分的釋放機制為,社區(qū)成員發(fā)布獨家資訊、合作平臺發(fā)布獨家項目進(jìn)展等行為,根據(jù)參與ID數(shù),釋放相應(yīng)比例XT(發(fā)布者與參與者各獲得50%),直至全部釋放完成(釋放完成之后,后續(xù)獎勵來源于平臺利潤池);
第三類:投資者持主流數(shù)字貨幣,在平臺中進(jìn)行資產(chǎn)管理,根據(jù)兌換比例,釋放一定數(shù)量的XT,早期投資人與團(tuán)隊持有部分同步,按比例解鎖;
回購機制為:所得利潤(以XT計)的50%返還給持幣者;剩余進(jìn)入平臺利潤池中,按月對利潤池中的50%的XT進(jìn)行銷毀,直至XT總量為10億枚;其余作為平臺生態(tài)建設(shè)基金;
7 數(shù)字貨幣權(quán)益
利潤分成:持有XT,是為平臺用戶,可以享受平臺利潤50%的分成;
平臺治理:參與平臺活動享受XT獎勵、其他項目方的空投活動;
功能定制:可基于平臺AI大數(shù)據(jù),投資者可購買針對個人交易策略進(jìn)行優(yōu)化的服務(wù)
實用的拜占庭容錯算法
BFT 是區(qū)塊鏈共識算法中,需要解決的一個核心問題。比特幣的POW,eos的dpos,以及共識算法pos,這些公鏈算法,解決的是共識節(jié)點眾多情況下的bft問題。
拜占庭將軍問題。也稱為拜占庭容錯。
用來描述分布式系統(tǒng)一致性問題。
背景如下:
拜占庭帝國想要進(jìn)攻一個強大的敵人,為此派出了10支軍隊去包圍這個敵人。這個敵人雖不比拜占庭帝國,但也足以抵御5支常規(guī)拜占庭軍隊的同時襲擊。這10支軍隊在分開的包圍狀態(tài)下同時攻擊。他們?nèi)我恢к婈爢为氝M(jìn)攻都毫無勝算,除非有至少6支軍隊(一半以上)同時襲擊才能攻下敵國。他們分散在敵國的四周,依靠通信兵騎馬相互通信來協(xié)商進(jìn)攻意向及進(jìn)攻時間。困擾這些將軍的問題是,他們不確定他們中是否有叛徒,叛徒可能擅自變更進(jìn)攻意向或者進(jìn)攻時間。在這種狀態(tài)下,拜占庭將軍們才能保證有多于6支軍隊在同一時間一起發(fā)起進(jìn)攻,從而贏取戰(zhàn)斗?
單從上面的說明可能無法理解這個問題的復(fù)雜性,我們來簡單分析一下:
先看在沒有叛徒情況下,假如一個將軍A提一個進(jìn)攻提議(如:明日下午1點進(jìn)攻,你愿意加入嗎?)由通信兵通信分別告訴其他的將軍,如果幸運中的幸運,他收到了其他6位將軍以上的同意,發(fā)起進(jìn)攻。如果不幸,其他的將軍也在此時發(fā)出不同的進(jìn)攻提議(如:明日下午2點、3點進(jìn)攻,你愿意加入嗎?),由于時間上的差異,不同的將軍收到(并認(rèn)可)的進(jìn)攻提議可能是不一樣的,這是可能出現(xiàn)A提議有3個支持者,B提議有4個支持者,C提議有2個支持者等等。
再加一點復(fù)雜性,在有叛徒情況下,一個叛徒會向不同的將軍發(fā)出不同的進(jìn)攻提議(通知A明日下午1點進(jìn)攻, 通知B明日下午2點進(jìn)攻等等),一個叛徒也會可能同意多個進(jìn)攻提議(即同意下午1點進(jìn)攻又同意下午2點進(jìn)攻)。
叛徒發(fā)送前后不一致的進(jìn)攻提議,被稱為“拜占庭錯誤”,而能夠處理拜占庭錯誤的這種容錯性稱為「Byzantine fault tolerance」,簡稱為BFT。
使用密碼學(xué)算法保證節(jié)點之間的消息傳送是不可篡改的, 通過下面的算法我們可以保證A將軍收到B將軍發(fā)來的消息確實是B將軍本人的真實請求 。
我們采用的是哈希函數(shù)(散列算法)SHA256 -- 從數(shù)據(jù)(byte)值中創(chuàng)建獨一無二的hash值,并壓縮成摘要,將數(shù)據(jù)格式固定下來。通過這個摘要與個人私鑰生成Digital Signature 和個人公鑰Public-key certificate,接收方驗證簽名和摘要,如果是通過驗證,即證明摘要內(nèi)容沒有經(jīng)過篡改。
pbft容忍無效或者惡意節(jié)點數(shù)量 e 。為了保證整個系統(tǒng)可以正常運作,需要有2f+1個正常節(jié)點,系統(tǒng)的總結(jié)點數(shù)為 :3f+1。即pbft算法容忍小于1/3的惡意或者無效節(jié)點。 原因見節(jié)點作惡的極端情況
pbft是一種狀態(tài)機副本復(fù)制算法,所有副本在一個view輪換過程中操作,哪些是主節(jié)點(進(jìn)攻的提議者的大將軍們,輪流當(dāng))通過view中其他節(jié)點(其他將軍)賦予的編號和節(jié)點數(shù)集合來確定,即:主節(jié)點p=v mod |R| 。 v:view編號,|R|節(jié)點個數(shù),p:主節(jié)點編號。 關(guān)于狀態(tài)機復(fù)制算法、view change的意義(主要是防止主節(jié)點作惡),主節(jié)點詳見論文。
基于拜占庭將軍問題,PBFT算法一致性的確保主要分為這三個階段:預(yù)準(zhǔn)備(pre-prepare)、準(zhǔn)備(prepare)和確認(rèn)(commit)。流程如下圖所示:
[圖片上傳失敗...(image-e3329d-1562488133052)]
首先解釋一下上面各個符號表達(dá)的意思:
下面結(jié)合上圖,詳細(xì)說一下PBFT的步驟:
根據(jù)上述流程,在 N ≥ 3F + 1 的情況下一致性是可能解決, N為總計算機數(shù),F(xiàn)為有問題的計算機總數(shù) 。
下面所有的校驗流程略去對消息內(nèi)容、簽名和身份的驗證,即已經(jīng)保證了節(jié)點之間消息傳播是不可篡改的
上述算法中,比較重要的一個點是view change,為了能恢復(fù)之前的請求,每一個副本節(jié)點收到消息之后或者發(fā)送消息的時候都會記錄消息到本地的log記錄中。當(dāng)執(zhí)行請求后,副本節(jié)點需要把之前該請求的記錄消息清除掉。最簡單的做法是在reply消息后,在執(zhí)行一次當(dāng)前狀態(tài)的共識同步,但是為了節(jié)省資源,一般在多條請求K后執(zhí)行一次狀態(tài)同步。這個狀態(tài)同步就是checkpoint消息。
為了節(jié)省內(nèi)存,系統(tǒng)需要一種將日志中的 無異議消息記錄 刪除的機制。為了保證系統(tǒng)的安全性,副本節(jié)點在刪除自己的消息日志前,需要確保至少 f+1 個正常副本節(jié)點執(zhí)行了消息對應(yīng)的請求,并且可以在視圖變更時向其他副本節(jié)點證明。另外,如果一些副本節(jié)點錯過部分消息,但是這些消息已經(jīng)被所有正常副本節(jié)點刪除了,這就需要通過 傳輸部分或者全部服務(wù)狀態(tài)實現(xiàn)該副本節(jié)點的同步 。因此,副本節(jié)點同樣需要證明狀態(tài)的正確性。
在每一個操作執(zhí)行后都生成這樣的證明是非常消耗資源的。因此,證明過程只有在請求序號可以被某個常數(shù)(比如100)整除的時候才會周期性地進(jìn)行。我們將這些請求執(zhí)行后得到的狀態(tài)稱作 檢查點(checkpoint) ,并且將具有證明的檢查點稱作 穩(wěn)定檢查點(stable checkpoint) 。
上述情況是理想情況,實際上當(dāng)副本節(jié)點i向其他節(jié)點發(fā)出checkpoint消息之后,其他節(jié)點還沒有完成K條請求的相互共識,所以不會立即對i的請求作出響應(yīng)。其他節(jié)點會按照自己的處理步驟和順序,向前行進(jìn)和共識。但是此時i發(fā)出的checkpoint沒有形成stable,為了防止i太快,超過自己太多,于是被便會設(shè)置一個高水位H=h+L,其中L就是我們指定允許的高度差,等于checkpoint周期處理數(shù)K的整數(shù)倍,可以設(shè)置為L=2K。當(dāng)副本節(jié)點i處理請求超過高水位H時,副本節(jié)點即使接受到請求也會視為非法請求。等待stable checkpoint發(fā)生變化,再繼續(xù)向前推進(jìn)處理。
如果主節(jié)點作惡,它可能會給不同的請求編上相同的序號,或者不去分配序號,或者讓相鄰請求的序號不連續(xù)。備份節(jié)點(備份主節(jié)點)應(yīng)當(dāng)有職責(zé)來主動檢查這些序號的合法性。如果主節(jié)點掉線或者作惡不廣播客戶端的請求,客戶端設(shè)置超時機制,超時的話,向所有副本節(jié)點廣播請求消息。副本節(jié)點檢測出主節(jié)點或者下線,發(fā)起view change流程。
我們在上面講到,當(dāng)網(wǎng)絡(luò)中有F臺有問題的計算機時,至少需要3F+1臺計算機才能保證一致性問題的解決,我們在這里討論一下原因。
我們可以考慮:由于有F個節(jié)點為故障或被攻擊的節(jié)點,故我們只能從N-F個節(jié)點中進(jìn)行判斷。但是由于異步傳輸,故當(dāng)收到N-F個消息后,并不能確定后面是否有新的消息。(有可能是目前收到的N-F個節(jié)點的消息中存在被攻擊的節(jié)點發(fā)來的消息,而好的節(jié)點的消息由于異步傳輸還沒有被收到。)
我們考慮最壞的情況,即剩下F個都是好的節(jié)點,收到的中有F個被攻擊的節(jié)點,故我們需要使得收到的中好節(jié)點的數(shù)量 (N-F)-F 大于被攻擊節(jié)點的數(shù)量 F ,于是有 N-2FF ,即 N3F ,所以N的最小整數(shù)為 N=3F+1 。
pbft是需要參與認(rèn)證的節(jié)點進(jìn)行的。所以一個完整的共識算法包括DPOS+PBFT。其速度是可以達(dá)到1500tps左右的。
參考文獻(xiàn):
Practical Byzantine Fault Tolerance
Miguel Castro and Barbara Liskov Laboratory for Computer Science, Massachusetts Institute of Technology, 545 Technology Square, Cambridge, MA 02139 castro,liskov @lcs .mit.edu
部分論文翻譯
文章題目:pbft代碼分析java,pb 編譯
本文URL:http://chinadenli.net/article38/hohhpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站改版、手機網(wǎng)站建設(shè)、品牌網(wǎng)站制作、、響應(yīng)式網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)