因此,社區(qū)出現(xiàn)了閃電網(wǎng)絡(luò)、雷電網(wǎng)絡(luò)等鏈下或側(cè)鏈的方案,試圖解決交易性能低下的問題——這些技術(shù)并不提升區(qū)塊鏈本身的共識性能,而是將交易放到區(qū)塊鏈的外部進行。
閃電網(wǎng)絡(luò)(LightningNetwork)
閃電網(wǎng)絡(luò)(LightingNetwork)指的是,A和B兩人可以把比特幣放到一個多重簽名錢包中鎖定(鏈下),然后進行交易簽名更改雙方各自能取回的比特幣數(shù)量。交易參與方可以隨時關(guān)閉交易通道,最后一筆經(jīng)過簽名且包含最新余額動態(tài)的交易最終將會被廣播并寫入比特幣區(qū)塊鏈(回歸鏈上)。這個交易過程也可以在更多人之間進行,整個過程實際上不需要在主鏈確認(rèn),因為都是幾方之間倒來倒去的”數(shù)字游戲“,因此交易速度會非常迅速。只有當(dāng)關(guān)閉交易通道時,才會最終確定各自的余額并寫進主鏈區(qū)塊。
在閃電網(wǎng)絡(luò)出現(xiàn)前,雖然比特幣社區(qū)也試圖通過區(qū)塊擴容、隔離見證等技術(shù)在一定程度上增加交易處理能力,但這些方式并不能導(dǎo)致交易處理能力出現(xiàn)數(shù)量級的改善。以比特幣區(qū)塊鏈為后盾,在鏈下實現(xiàn)真正的點對點微支付交易,區(qū)塊鏈處理能力的瓶頸被徹底打破,時延、最終性、容量甚至隱私問題也迎刃而解,這就是比特幣“閃電網(wǎng)絡(luò)”(LightningNetwork)的思路。
閃電網(wǎng)絡(luò)的關(guān)鍵技術(shù)有兩個:RSMC和HTLC。前者解決了鏈下交易的確認(rèn)問題,后者解決了支付通道的問題。
閃電網(wǎng)絡(luò)的基礎(chǔ)是交易雙方之間的雙向微支付通道,RSMC(RecoverableSequenceMaturityContract)定義了該雙向微支付通道的最基本工作方式。HTLC(HashedTimelockContract)進一步實現(xiàn)了有條件的資金支付,通道余額的分配方式也因此變得更為復(fù)雜。基于HTLC可以實現(xiàn)“閃電網(wǎng)絡(luò)”。
盡管閃電網(wǎng)絡(luò)本身可以基于任何合適的傳統(tǒng)技術(shù)構(gòu)建(例如中心化的服務(wù)器和傳統(tǒng)數(shù)據(jù)庫),閃電網(wǎng)絡(luò)的支付通道也可能逐漸向少數(shù)大型中介集中,變成若干大型中介彼此互聯(lián)、普通用戶直連大型中介的形式,但這種方案仍然具有傳統(tǒng)中心化方案不可比擬的優(yōu)勢,因為用戶現(xiàn)在并不需要信任中介,不需要在中介處存錢才能轉(zhuǎn)移支付,資金安全受到比特幣區(qū)塊鏈的充分保護。
閃電網(wǎng)絡(luò)存在的問題:
閃電網(wǎng)絡(luò)的支付通道會導(dǎo)致一定程度的中心化。如果閃電網(wǎng)絡(luò)存在,人們不會立即就信任它,短時間內(nèi)不會有錢包或支付供應(yīng)商支持它。
使用閃電網(wǎng)絡(luò)需要提前充值。閃電網(wǎng)絡(luò)的運行需要用戶和企業(yè)鎖定在交易期間他們所需數(shù)目的比特幣。對于小額交易不是問題,然而,如果按照閃電網(wǎng)絡(luò)所建議的‘合理使用案例’中每個人在每6個月中只開啟1個通道的話,這意味著該通道需要鎖定這個用戶在該時間段內(nèi)所持有的最大數(shù)目的價值額度,這需要對鏈下網(wǎng)絡(luò)的充分信任,還需要人們能預(yù)見將花費多少額度,以及何時花費。
無法進行離線支付,A和B交易,如果B掉線了,就無法簽名確認(rèn)分配方案,交易失敗。
雷電網(wǎng)絡(luò)(RaidenNetwork)
雷電網(wǎng)絡(luò)(RaidenNetwork)是以太坊社區(qū)提出的自己的鏈下微支付通道解決方案,跟比特幣的閃電網(wǎng)絡(luò)的思路類似,但也有所發(fā)展,例如引入了較HTLC更為通用的“SmartCondition”等。
因為以太坊智能合約對報文格式?jīng)]有特別的字段限制,使得Raiden得以為通道余額快照引入一個單增序號,極為輕松自然地解決了舊版本快照的識別和作廢問題。
和閃電網(wǎng)絡(luò)一樣,雙方需要在以太坊區(qū)塊鏈上開設(shè)通道并各自鎖定以太。這步動作可通過向Raiden智能合約發(fā)送一條雙方簽名認(rèn)可的報文來實現(xiàn)。報文中的關(guān)鍵信息包括:雙方公鑰、雙方鎖定資產(chǎn)數(shù)量、雙方簽名。
此后的任何支付動作都可以發(fā)生在以太坊區(qū)塊鏈外,參與雙方只需要私下傳遞一系列報文。
該如何提升性能?
以迅雷鏈為例,下面來解讀下如何提升性能。首先從架構(gòu)上優(yōu)化,提出同構(gòu)多鏈的框架。即系統(tǒng)由一條條相對獨立(獨立進行共識)的鏈組成,每條鏈有多個節(jié)點,每個節(jié)點被分配到其中一條鏈上,不同的賬戶數(shù)據(jù)被錨定在不同的同構(gòu)鏈上,然后接入層將交易路由到發(fā)送方所在的鏈上進行區(qū)塊打包與共識。系統(tǒng)中鏈的數(shù)量能夠按業(yè)務(wù)需求動態(tài)增加。因此同構(gòu)多鏈的架構(gòu)首先保證了系統(tǒng)的可擴展性。
除了架構(gòu)上優(yōu)化使得并發(fā)處理性能提升,還應(yīng)該保證分布式系統(tǒng)中的強一致性,并具備一定的容錯和防拜占庭節(jié)點作惡的能力,因此每條鏈內(nèi)的共識算法可以選擇類BFT算法。在每一條單獨的鏈上,使用實用拜占庭容錯算法(PBFT)保證強一致性,而且一方面通過容錯性,降低節(jié)點失效對整個分布式系統(tǒng)的影響,另一方面采用多次重試和更換失效節(jié)點機制,降低節(jié)點間長時間失效的概率,保證系統(tǒng)的可用性。為了解決PBFT算法網(wǎng)絡(luò)消耗高的問題,對算法作出了一些優(yōu)化,降低網(wǎng)絡(luò)消耗,提高了算法的可用性。
與傳統(tǒng)的PBFT算法類似,對于每一輪共識操作,又包括三個階段:Propose,Prevote和Precommit。
當(dāng)在某一輪達成共識(收到+2/3的Precommit投票)后,就會進入對下一個高度的共識,從第0輪開始。下面簡單介紹下詳細(xì)的步驟:
首先介紹一個鎖定區(qū)塊的概念,表示在某個特定的高度和輪數(shù),節(jié)點對某個塊收到超過節(jié)點總數(shù)2/3的Prevote投票集合后,則此節(jié)點對于此高度此輪的區(qū)塊進行鎖定。也就是說,節(jié)點以鎖定區(qū)塊來表示對某一個區(qū)塊的認(rèn)可。
1)Propose階段:系統(tǒng)中所有驗證人節(jié)點輪流作為提議者提出提議,而系統(tǒng)中非提議者的節(jié)點在收到提議后,就會進入Prevote階段。如果當(dāng)前節(jié)點此前存在已鎖定區(qū)塊,則還需要收集所有針對已鎖定區(qū)塊的Prevote投票。
2)Prevote階段:當(dāng)節(jié)點進入到Prevote階段后,每個節(jié)點廣播自己的Prevote投票。
具體的,如果當(dāng)前區(qū)塊高度或投票輪數(shù)高于此前已鎖定的區(qū)塊高度或輪數(shù),則將原鎖定的區(qū)塊進行解鎖。如果此時節(jié)點仍含有未解鎖的區(qū)塊,則對此鎖定的區(qū)塊投Prevote投票。或者如果節(jié)點收到合法的Propose區(qū)塊,則對此區(qū)塊投Prevote投票。
當(dāng)階段超時或者接收到大于2/3的針對某個塊的投票后,則節(jié)點鎖定此區(qū)塊并進入。
3)Precommit階段:當(dāng)節(jié)點存在已鎖定區(qū)塊,則對此區(qū)塊投Precommit投票。當(dāng)節(jié)點收到針對已鎖定區(qū)塊大于2/3的Precommit投票時,就可以將這個塊commit,并且進入針對下一個高度塊的共識。
若Precommit階段定時器超時,則節(jié)點保存已鎖定區(qū)塊,然后重新返回到Propose階段。
各節(jié)點通過在以上階段上循環(huán),對區(qū)塊進行一致性共識。與PBFT算法類似,迅雷鏈共識也經(jīng)過了三階段提交,但通過引入?yún)^(qū)塊鎖定操作,通過緩存待確認(rèn)區(qū)塊,降低了未達成共識情況下重復(fù)通信區(qū)塊帶來的網(wǎng)絡(luò)壓力,從而提升了共識效率。
此外,還可以使用玩客云設(shè)備作為驗證人節(jié)點。由于玩客云節(jié)點數(shù)量非常龐大(已超過150萬個節(jié)點數(shù)),而且因為是用戶家庭的共享節(jié)點而存在一定不穩(wěn)定性,所以在PBFT的基礎(chǔ)上融合DPoS的思想,在每條鏈上周期性地(例如每隔5000個區(qū)塊)選舉出驗證人節(jié)點參與共識。
綜上所述,新型區(qū)塊鏈技術(shù)采用多鏈架構(gòu)實現(xiàn)了可擴展性+使用PBFT實現(xiàn)了強一致性+使用更公平的DPoS進一步提升了共識效率、也得到了更高的可用性。從去中心化(Decentralization),安全性(Security)和可擴展性(Scalability)三要素的角度看,由海量的廣泛分布的玩客云設(shè)備支撐了去中心化和安全性,采用多鏈架構(gòu)以實現(xiàn)可擴展性。
總結(jié)
共識機制目前已經(jīng)成為了區(qū)塊鏈系統(tǒng)性能的關(guān)鍵瓶頸。單一的共識算法均存在各種問題,例如PoW算法存在消耗大量計算資源及性能低下的問題;PoS或DPoS存在“富豪統(tǒng)治”問題。融合多種共識算法優(yōu)勢的想法正受到越來越廣泛的關(guān)注。此外,包括在少部分可信節(jié)點中選取主節(jié)點的共識算法、保證高概率正確性的的異步共識算法、基于特定安全性前提并減少網(wǎng)絡(luò)廣播的共識算法、基于可信硬件的共識算法等,也是未來區(qū)塊鏈共識算法的研究熱點。
隨著區(qū)塊鏈中賬本數(shù)據(jù)的增加和業(yè)務(wù)量的提升,可擴展性也是區(qū)塊鏈系統(tǒng)迫切需要解決的問題,同時對共識算法也提出了新的挑戰(zhàn)。以太坊項目正在研發(fā)中的分片(shard)方案也是實現(xiàn)可擴展性的另一種方案,受到廣泛關(guān)注。
本文以迅雷鏈為例的實踐,相信能給業(yè)界提供一個區(qū)塊鏈應(yīng)用落地的優(yōu)秀案例:在設(shè)計和實現(xiàn)同構(gòu)多鏈的架構(gòu)的同時,盡可能地保證系統(tǒng)的可擴展性;采用有完善理論證明的PBFT算法保證強一致性和共識性能,滿足了強一致性和高可擴展性的業(yè)務(wù)需求;在海量的玩客云節(jié)點上,改進了DPoS的公平性,進一步提升了共識效率和可用性。