當前位置:
首頁 > 科技 > 如何理解區塊鏈的共識演算法?

如何理解區塊鏈的共識演算法?

隨著業務量的增加,比特幣等公有鏈網路已經擁堵不堪,交易費節節攀升,對比傳統金融結算系統已經沒有速度上的優勢。對於去中心化的系統,由於社區成員基於自己的利益考慮,無法達成一致,也就難以採用更高效的共識演算法或更先進的系統架構。

因此,社區出現了閃電網路、雷電網路等鏈下或側鏈的方案,試圖解決交易性能低下的問題——這些技術並不提升區塊鏈本身的共識性能,而是將交易放到區塊鏈的外部進行。

閃電網路(Lightning Network)

閃電網路(Lighting Network)指的是,A和B兩人可以把比特幣放到一個多重簽名錢包中鎖定(鏈下),然後進行交易簽名更改雙方各自能取回的比特幣數量。交易參與方可以隨時關閉交易通道,最後一筆經過簽名且包含最新餘額動態的交易最終將會被廣播並寫入比特幣區塊鏈(回歸鏈上)。這個交易過程也可以在更多人之間進行,整個過程實際上不需要在主鏈確認,因為都是幾方之間倒來倒去的」數字遊戲「,因此交易速度會非常迅速。只有當關閉交易通道時,才會最終確定各自的餘額並寫進主鏈區塊。

在閃電網路出現前,雖然比特幣社區也試圖通過區塊擴容、隔離見證等技術在一定程度上增加交易處理能力,但這些方式並不能導致交易處理能力出現數量級的改善。以比特幣區塊鏈為後盾,在鏈下實現真正的點對點微支付交易,區塊鏈處理能力的瓶頸被徹底打破,時延、最終性、容量甚至隱私問題也迎刃而解,這就是比特幣「閃電網路」(Lightning Network)的思路。

閃電網路的關鍵技術有兩個:RSMC和HTLC。前者解決了鏈下交易的確認問題,後者解決了支付通道的問題。

閃電網路的基礎是交易雙方之間的雙向微支付通道,RSMC(Recoverable Sequence Maturity Contract)定義了該雙向微支付通道的最基本工作方式。HTLC(Hashed Timelock Contract)進一步實現了有條件的資金支付,通道餘額的分配方式也因此變得更為複雜。基於HTLC可以實現「閃電網路」。

儘管閃電網路本身可以基於任何合適的傳統技術構建(例如中心化的伺服器和傳統資料庫),閃電網路的支付通道也可能逐漸向少數大型中介集中,變成若干大型中介彼此互聯、普通用戶直連大型中介的形式,但這種方案仍然具有傳統中心化方案不可比擬的優勢,因為用戶現在並不需要信任中介,不需要在中介處存錢才能轉移支付,資金安全受到比特幣區塊鏈的充分保護。

閃電網路存在的問題:

閃電網路的支付通道會導致一定程度的中心化。如果閃電網路存在,人們不會立即就信任它,短時間內不會有錢包或支付供應商支持它。

使用閃電網路需要提前充值。閃電網路的運行需要用戶和企業鎖定在交易期間他們所需數目的比特幣。對於小額交易不是問題,然而,如果按照閃電網路所建議的『合理使用案例』中每個人在每6個月中只開啟1個通道的話,這意味著該通道需要鎖定這個用戶在該時間段內所持有的最大數目的價值額度,這需要對鏈下網路的充分信任,還需要人們能預見將花費多少額度,以及何時花費。

無法進行離線支付,A和B交易,如果B掉線了,就無法簽名確認分配方案,交易失敗。

雷電網路(Raiden Network)

雷電網路(Raiden Network)是以太坊社區提出的自己的鏈下微支付通道解決方案,跟比特幣的閃電網路的思路類似,但也有所發展,例如引入了較HTLC更為通用的「Smart Condition」等。

因為以太坊智能合約對報文格式沒有特別的欄位限制,使得Raiden得以為通道餘額快照引入一個單增序號,極為輕鬆自然地解決了舊版本快照的識別和作廢問題。

和閃電網路一樣,雙方需要在以太坊區塊鏈上開設通道並各自鎖定以太。這步動作可通過向Raiden智能合約發送一條雙方簽名認可的報文來實現。報文中的關鍵信息包括:雙方公鑰、雙方鎖定資產數量、雙方簽名。

此後的任何支付動作都可以發生在以太坊區塊鏈外,參與雙方只需要私下傳遞一系列報文。

該如何提升性能?

以迅雷鏈為例,下面來解讀下如何提升性能。首先從架構上優化,提出同構多鏈的框架。即系統由一條條相對獨立(獨立進行共識)的鏈組成,每條鏈有多個節點,每個節點被分配到其中一條鏈上,不同的賬戶數據被錨定在不同的同構鏈上,然後接入層將交易路由到發送方所在的鏈上進行區塊打包與共識。系統中鏈的數量能夠按業務需求動態增加。因此同構多鏈的架構首先保證了系統的可擴展性。

除了架構上優化使得並發處理性能提升,還應該保證分散式系統中的強一致性,並具備一定的容錯和防拜占庭節點作惡的能力,因此每條鏈內的共識演算法可以選擇類 BFT 演算法。在每一條單獨的鏈上,使用實用拜占庭容錯演算法(PBFT)保證強一致性,而且一方面通過容錯性,降低節點失效對整個分散式系統的影響,另一方面採用多次重試和更換失效節點機制,降低節點間長時間失效的概率,保證系統的可用性。為了解決PBFT演算法網路消耗高的問題,對演算法作出了一些優化,降低網路消耗,提高了演算法的可用性。

與傳統的PBFT演算法類似,對於每一輪共識操作,又包括三個階段:Propose,Prevote 和 Precommit。

當在某一輪達成共識(收到+2/3 的 Precommit 投票)後,就會進入對下一個高度的共識,從第 0 輪開始。下面簡單介紹下詳細的步驟:

首先介紹一個鎖定區塊的概念,表示在某個特定的高度和輪數,節點對某個塊收到超過節點總數 2/3 的 Prevote 投票集合後,則此節點對於此高度此輪的區塊進行鎖定。也就是說,節點以鎖定區塊來表示對某一個區塊的認可。

1)Propose 階段:系統中所有驗證人節點輪流作為提議者提出提議,而系統中非提議者的節點在收到提議後,就會進入 Prevote 階段。如果當前節點此前存在已鎖定區塊,則還需要收集所有針對已鎖定區塊的 Prevote 投票。

2)Prevote 階段:當節點進入到 Prevote 階段後,每個節點廣播自己的Prevote 投票。

具體的,如果當前區塊高度或投票輪數高於此前已鎖定的區塊高度或輪數,則將原鎖定的區塊進行解鎖。如果此時節點仍含有未解鎖的區塊,則對此鎖定的區塊投 Prevote 投票。或者如果節點收到合法的 Propose 區塊,則對此區塊投 Prevote 投票。

當階段超時或者接收到大於 2/3 的針對某個塊的投票後,則節點鎖定此區塊並進入。

3)Precommit 階段:當節點存在已鎖定區塊,則對此區塊投 Precommit 投票。當節點收到針對已鎖定區塊大於 2/3 的 Precommit 投票時,就可以將這個塊 commit,並且進入針對下一個高度塊的共識。

若 Precommit 階段定時器超時,則節點保存已鎖定區塊,然後重新返回到 Propose 階段。

各節點通過在以上階段上循環,對區塊進行一致性共識。與 PBFT 演算法類似,迅雷鏈共識也經過了三階段提交,但通過引入區塊鎖定操作,通過緩存待確認區塊,降低了未達成共識情況下重複通信區塊帶來的網路壓力,從而提升了共識效率。

此外,還可以使用玩客雲設備作為驗證人節點。由於玩客雲節點數量非常龐大(已超過150萬個節點數),而且因為是用戶家庭的共享節點而存在一定不穩定性,所以在PBFT的基礎上融合DPoS的思想,在每條鏈上周期性地(例如每隔5000個區塊)選舉出驗證人節點參與共識。

綜上所述,新型區塊鏈技術採用多鏈架構實現了可擴展性 + 使用PBFT實現了強一致性 + 使用更公平的DPoS進一步提升了共識效率、也得到了更高的可用性。從去中心化(Decentralization),安全性(Security)和可擴展性(Scalability)三要素的角度看,由海量的廣泛分布的玩客雲設備支撐了去中心化和安全性,採用多鏈架構以實現可擴展性。

總結

共識機制目前已經成為了區塊鏈系統性能的關鍵瓶頸。單一的共識演算法均存在各種問題,例如PoW演算法存在消耗大量計算資源及性能低下的問題;PoS或DPoS存在「富豪統治」問題。融合多種共識演算法優勢的想法正受到越來越廣泛的關注。此外,包括在少部分可信節點中選取主節點的共識演算法、保證高概率正確性的的非同步共識演算法、基於特定安全性前提並減少網路廣播的共識演算法、基於可信硬體的共識演算法等,也是未來區塊鏈共識演算法的研究熱點。

隨著區塊鏈中賬本數據的增加和業務量的提升,可擴展性也是區塊鏈系統迫切需要解決的問題,同時對共識演算法也提出了新的挑戰。以太坊項目正在研發中的分片(shard)方案也是實現可擴展性的另一種方案,受到廣泛關注。

本文以迅雷鏈為例的實踐,相信能給業界提供一個區塊鏈應用落地的優秀案例:在設計和實現同構多鏈的架構的同時,儘可能地保證系統的可擴展性;採用有完善理論證明的PBFT演算法保證強一致性和共識性能,滿足了強一致性和高可擴展性的業務需求;在海量的玩客雲節點上,改進了DPoS的公平性,進一步提升了共識效率和可用性。

聲明:本文為作者投稿,版權歸對方所有。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

如何用十分鐘學會函數式 Python?
iOS 12 真的能讓舊款 iPhone 速度飛起嗎?

TAG:CSDN |