迅雷鏈基於海量的玩客雲裝置作為記賬節點來構建區塊鏈服務。這些玩客雲裝置放置在使用者家裡,共享家庭頻寬和儲存,作為CDN、雲端計算、區塊鏈等服務的基礎設施,構成了一個龐大的計算機網路。
玩客雲網路相對於中心化的伺服器節點組成的網路,其特點可概括為以下幾個方面: 1)網路節點多:目前已經過150萬節點;2)計算效能低:採用廉價、低功耗的ARM架構的CPU,綠色環保但計算效能較低;
3)儲存容量小:儲存容量各不相同,但與伺服器相比容量很小;
4)網路環境差:使用者家庭的網路環境各不相同,包括不同的地理位置、不同的網路運營商、不同的頻寬,普遍頻寬小、時延高、穩定性低。
面對這種基礎設施環境和業務需求,我們需要一種安全的、一致性強、可擴充套件性高的共識演算法。
已有的共識演算法研究
PoW(Proof of Work):工作量證明消耗大量算力尋找滿足條件的隨機數,它存在以下缺點:
1)速度慢。絕大部分時間消耗在工作量證明中的hash運算;
2)能源消耗巨大,對環境不好。目前比特幣挖礦比159個國家消耗的能源還多;到2020年2月,它將使用和今天全世界一樣多的電力;
3)屬於概率一致性演算法,而非絕對一致性演算法。在產生分叉後,兩個分叉的網路各自繼續挖礦,經過一段時間後選擇包含最多區塊的那個鏈(最長鏈)為主鏈,例如比特幣中的一個交易等待6個區塊才能確認。
PoS(Proof of Stake): 權益證明根據節點持有的token數量以及時間獲得相應的記賬權。PoS減少了PoW的資源消耗,但是也存在問題:
1)安全性問題:帶來如Nothing-at-Stake Problem和Long-range attacks安全性上的問題;
2)依據權益結餘來選擇,會導致首富賬戶的權力更大,有可能支配記賬權;
3)PoS同樣屬於概率一致性演算法,而非絕對一致性演算法。
**DPoS(Delegated Proof of Stake):**授權權益證明是通過擁有token的人投票選出代理節點行使記賬的權利,是在可用性和去中心化這兩個維度上做出的平衡。它存在的問題包括:
1)由少數節點代替多數節點進行共識,其實是犧牲了區塊鏈去中心化的特性,以此來換取共識效率的提升;
2)節點之間可能存在內在聯絡的共謀;
3)超級節點競選爭議。由於網路無法解決女巫攻擊問題,1人1票的民主投票制會被1代幣1票制度所取代,導致“富豪統治”的結果;
4)DPoS同樣屬於概率一致性演算法,而非絕對一致性演算法。
**Paxos 演算法:**Paxos 演算法及其衍生出的 Raft 演算法等是強一致性演算法,但它們是CFT(Crash Fault Tolerance)類演算法,也就是它們只能處理節點故障的錯誤,而不能處理存在作惡節點的情況。
PBFT(Practical Byzantine Fault Tolerance): 實用拜占庭容錯共識是一種基於嚴格數學證明的強一致性演算法,經過多階段的資訊互動最終達成共識,只要系統中有三分之二以上的誠實節點,就能保證最終達成共識。PBFT的問題是通訊量大—— PBFT共識需要大量資訊互動,並且數量會隨著節點數的增加而急劇上升。這一特性決定了PBFT無法直接支援眾多的玩客雲節點參與共識。
根據我們的業務需求,PoW、PoS、DPoS等概率一致性演算法都不能滿足需求;Paxos、Raft等CFT類演算法也不適用於公共鏈;PBFT是強一致的BFT類演算法,但存在通訊量大的問題,也不能直接用於公有鏈。
**同構多鏈架構下的DPoA + PBFT **
根據玩客雲網路的實際情況和業務需求,現有的共識機制都無法滿足要求,因此迅雷鏈提出了獨有的同構多鏈架構結合DPoA + PBFT的共識機制。
同構多鏈架構,即系統由一條條相對獨立(獨立進行共識)的鏈組成,每條鏈有多個節點,每個節點被分配到其中一條鏈上,不同的賬戶資料被錨定在不同的同構鏈上,然後接入層將交易路由到傳送方所在的鏈上進行區塊打包與共識。系統中鏈的數量能夠按業務需求動態增加。因此同構多鏈的架構首先保證了系統的可擴充套件性,解決了玩客雲端儲存容量小的問題,因為節點無需儲存全量的區塊資料,而是隻儲存它所在子鏈的資料。
改進的PBFT,為保證分散式系統中的強一致性,並具備一定的容錯和防拜占庭節點作惡的能力,因此我們選擇了類 BFT演算法。在每一條單獨的鏈上,我們使用了改進的實用拜占庭容錯演算法(PBFT)保證強一致性。為了解決PBFT演算法網路消耗高的問題,對演算法作出了一些優化,降低網路消耗,提高了演算法的可用性。
DPoA(Delegated Proof-of-Ability),迅雷鏈在PBFT的基礎上,還根據DPoS的思想,提出了適用於玩客雲裝置的、我們稱之為DPoA共識機制。與傳統的DPoS不同之處在於,迅雷鏈的DPoA並不是根據礦工持有的代幣數量或幣齡作為選舉標準投票權重,而是按玩客雲節點的儲存容量、網路穩定性、頻寬、時延、CPU使用率等指標作為衡量標準,以獲得更好的公平性和網路效率。
DPoA的具體處理機制如下:
1)對於儲存空間不足的裝置,則不再參與記賬;
2)對於網路不穩定的節點,則減小其權重,則由它提議(Propose)區塊的機率降低,這樣就能讓網路狀況好的節點多提議區塊;
3)對於頻寬大的節點,則增加其權重,以提高它提議區塊的機率;
4)對於時延低的節點,則增加其權重,以提高它提議區塊的機率;
5)對於CPU使用率高的節點,則減小其權重,以降低它提議區塊的機率。
DPoA的共識機制說起來其實很簡單,但它能有效保證參與記賬的節點總是有足夠儲存空間、系統狀態較好、網路環境較好的節點,保證了區塊鏈系統的穩定執行,解決了玩客雲節點網路環境差異大的問題。由於DPoA每輪動態選擇部分滿足條件的節點作為投票節點,使共識機制更加安全、穩定和高效。
為什麼我們能夠使用DPoA的共識機制?我們之所以能夠採用DPoA的共識機制,原因在於:
1)在玩客雲裝置中,我們可以內建完善的檢測與監控系統,能持續檢測玩客戶雲裝置的儲存容量、線上時長、頻寬、時延等資訊,為DPoA共識演算法提供實時狀態的資料支援,而這是普通的公共鏈專案無法做到的。
2)玩客雲節點數量龐大,並且一直在增加,即使排除不滿足條件的節點,也仍然有大量的節點可以使用,並能一直得到補充。
玩客雲的激勵機制和作為家庭共享儲存的功能,讓使用者樂於投入更大的儲存空間。
總結
迅雷鏈結合玩客雲網路節點多、計算效能低、儲存容量小、網路環境差的實際情況,採用同構多鏈架構實現了可擴充套件性,採用PBFT實現了強一致性和高效率共識,用更公平的DPoA機制得到了更高的可用性,也進一步提升了共識效率。